我目前正在编写MDN JavaScript文档,并在其中一个初学者练习中声称:(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Evaluating_variables)
在布尔上下文中使用时,未定义的值表现为false。
var myArray = [];
if (!myArray[0]) myFunction();
然而,我的大脑很简单,不能在if语句中使用对立面。因此我使用.length函数重写它:
var myArray = [];
if(myArray.length === 1) {
console.log("How?");
} else {
console.log("Hello World!");
}
我期待的是Hello World!要打印,因为数组未定义,应该返回false,但它返回1。
关于为什么会发生这种情况的任何解释都会很棒!
对于测试myArray.length === 1
来评估true
,数组必须只包含一个元素。但你没有放任何东西,所以测试失败,并打印Hello World!
。
将数组视为容器。
var myArray; // is undefined
var myArray = [] // is NOT undefined
var myArray = []
是空的,但它是一个有效的数组。
因此,使用.length
,一个更好的测试将是:
if (myArray.length === 0)
然后How?
将被打印。
因为数组中没有任何内容,所以长度为0。
var myArray = [];
if (!myArray[0]) myFunction();
myArray[0]
- 在此数组初始化中,默认值为0。
if(myArray.length === 1)
- 在这一行中,它将返回以获得初始化的相反结果。所以,它打印为1。
如果您怀疑调试检查控制台输出或检查变量/创建您观看。
var myArray = [];
console.log(!myArray);
console.log(!myArray[0]);
printIt(myArray.length === 0)
printIt(myArray.length === 1)
function printIt(ok) {
if(ok) { console.log("Ok."); }
else { console.log("Not ok."); }
}
如果您要检查数组是否为空,您应该通过代码表达您的愿望,因此:
if(array.length === 0) …
如果您要检查变量是否已声明...
var array;
console.log(!array);
array = [];
console.log(!array);
console.log(Array.isArray(array));
let u = "u";
console.log(Array.isArray(u));
如果你需要知道两者......
var array;
//console.log(array.length);
array = [];
if(array && Array.isArray(array) && array.length === 0) { array.push("Hi!"); console.log(array[0]);}
let w = "w";
if(w && Array.isArray(w)) { console.log(w);}