我目前正在研究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!因为数组未定义而要打印,但是返回1时应返回false。
任何关于为什么发生这种情况的解释都很好!
答案 0 :(得分: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。
答案 1 :(得分:0)
如果您不确定调试是否要通过控制台输出进行检查,或者检查要监视的变量/创建的内容。
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);}
答案 2 :(得分:0)
var myArray = [];
if (!myArray[0]) myFunction();
myArray[0]
-在此数组初始化中,默认零为1。
if(myArray.length === 1)
-在这一行中,它将返回以获得相反的初始化结果。因此,它打印为1。