我读到JavaScript中的双管道检查变量是否是假的,并且undefined
是JavaScript中的假值,例如
这意味着如果值为falsey(例如0,“”,null,undefined(请参阅JavaScript中的所有falsey值)),则将其视为false;否则它被视为真实。
所以我尝试了这一点,发现undefined确实没有被评估为假,而是抛出一个错误:
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