JavaScript (||) 中的双管道抛出错误而不是评估为虚假
Double pipes in JavaScript (||) throw error instead of evaluate as falsy
我读到 JavaScript 中的双管道检查变量是否为假值,undefined
是 JavaScript 中的假值,例如
It means that if the value is falsey (e.g. 0, "", null, undefined (see
also All falsey values in JavaScript)), it will be treated as false;
otherwise it's treated as true.
所以我试了一下,发现 undefined 确实没有被评估为 falsy 而是抛出一个错误:
let elemContent = document.getElementById('content');
let a = null;
let b = 2;
elemContent.innerHTML += a || 'ok'; // "ok"
elemContent.innerHTML += b || 'ok'; // "2"
elemContent.innerHTML += whatever || 'ok'; // "ERROR: whatever is not defined"
undefined
是不是JavaScript中的虚值,或者如何理解这个矛盾?
因为在您的代码中,whatever
不仅是 undefined
,而且 未声明
要避免此错误,您可以执行以下操作:
let elemContent = document.getElementById('content');
let a = null;
let b = 2;
elemContent.innerHTML += a || 'ok'; // "ok"
elemContent.innerHTML += b || 'ok'; // "2"
elemContent.innerHTML += (typeof whatever !== 'undefined' && whatever) || 'ok3'; // "ok3"
undefined
确实是假的,但是在 JavaScript 中使用一个变量在它被声明之前是一个错误。
在某处添加 let whatever = undefined
以查看您期望的行为。
undefined
和 not defined
的错误是不同的。 undefined
是 声明的 变量的值,当 not defined
的错误意味着您的变量未声明。
undefined
的例子:
let elemContent = document.getElementById('content');
let a = null;
let b = 2;
let whatever;
console.log(whatever)
elemContent.innerHTML += a || 'ok'; // "ok"
elemContent.innerHTML += b || 'ok'; // "2"
elemContent.innerHTML += whatever || 'ok'; // "whatever is undefined"
<div id="content"></div>
一个有 not defined
错误的例子:
let elemContent = document.getElementById('content');
let a = null;
let b = 2;
elemContent.innerHTML += a || 'ok'; // "ok"
elemContent.innerHTML += b || 'ok'; // "2"
elemContent.innerHTML += whatever || 'ok'; // "ERROR: whatever is not defined"
<div id="content"></div>
这是一个示例,您可以如何检查是否声明了变量并且它是否具有值(不是 undefined
):
let test = "test";
if (typeof test !== undefined) {
console.log("'test' is declared");
if(test) {
console.log("'test' has a value (not 'null', 'false', 'undefined'...)");
}
}
确认undefined是假的:
var whatever = undefined;
console.log(whatever || "undefined is really falsy");
let elemContent = document.getElementById('content');
let a = null;
let b = 2;
let c;
elemContent.innerHTML += a || 'ok'; // "ok"
elemContent.innerHTML += b || 'ok'; // "2"
elemContent.innerHTML += c || 'ko'; // "ko"
elemContent.innerHTML += whatever || 'ok'; // "ERROR: whatever is not defined"
c 是 undefined
。不管是 undeclared
我读到 JavaScript 中的双管道检查变量是否为假值,undefined
是 JavaScript 中的假值,例如
It means that if the value is falsey (e.g. 0, "", null, undefined (see also All falsey values in JavaScript)), it will be treated as false; otherwise it's treated as true.
所以我试了一下,发现 undefined 确实没有被评估为 falsy 而是抛出一个错误:
let elemContent = document.getElementById('content');
let a = null;
let b = 2;
elemContent.innerHTML += a || 'ok'; // "ok"
elemContent.innerHTML += b || 'ok'; // "2"
elemContent.innerHTML += whatever || 'ok'; // "ERROR: whatever is not defined"
undefined
是不是JavaScript中的虚值,或者如何理解这个矛盾?
因为在您的代码中,whatever
不仅是 undefined
,而且 未声明
要避免此错误,您可以执行以下操作:
let elemContent = document.getElementById('content');
let a = null;
let b = 2;
elemContent.innerHTML += a || 'ok'; // "ok"
elemContent.innerHTML += b || 'ok'; // "2"
elemContent.innerHTML += (typeof whatever !== 'undefined' && whatever) || 'ok3'; // "ok3"
undefined
确实是假的,但是在 JavaScript 中使用一个变量在它被声明之前是一个错误。
在某处添加 let whatever = undefined
以查看您期望的行为。
undefined
和 not defined
的错误是不同的。 undefined
是 声明的 变量的值,当 not defined
的错误意味着您的变量未声明。
undefined
的例子:
let elemContent = document.getElementById('content');
let a = null;
let b = 2;
let whatever;
console.log(whatever)
elemContent.innerHTML += a || 'ok'; // "ok"
elemContent.innerHTML += b || 'ok'; // "2"
elemContent.innerHTML += whatever || 'ok'; // "whatever is undefined"
<div id="content"></div>
一个有 not defined
错误的例子:
let elemContent = document.getElementById('content');
let a = null;
let b = 2;
elemContent.innerHTML += a || 'ok'; // "ok"
elemContent.innerHTML += b || 'ok'; // "2"
elemContent.innerHTML += whatever || 'ok'; // "ERROR: whatever is not defined"
<div id="content"></div>
这是一个示例,您可以如何检查是否声明了变量并且它是否具有值(不是 undefined
):
let test = "test";
if (typeof test !== undefined) {
console.log("'test' is declared");
if(test) {
console.log("'test' has a value (not 'null', 'false', 'undefined'...)");
}
}
确认undefined是假的:
var whatever = undefined;
console.log(whatever || "undefined is really falsy");
let elemContent = document.getElementById('content');
let a = null;
let b = 2;
let c;
elemContent.innerHTML += a || 'ok'; // "ok"
elemContent.innerHTML += b || 'ok'; // "2"
elemContent.innerHTML += c || 'ko'; // "ko"
elemContent.innerHTML += whatever || 'ok'; // "ERROR: whatever is not defined"
c 是 undefined
。不管是 undeclared