未定义的array.length返回true而不是false

问题描述 投票:1回答:3

我目前正在编写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。

关于为什么会发生这种情况的任何解释都会很棒!

javascript
3个回答
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。


0
投票
var myArray = [];
if (!myArray[0]) myFunction();

myArray[0] - 在此数组初始化中,默认值为0。

if(myArray.length === 1) - 在这一行中,它将返回以获得初始化的相反结果。所以,它打印为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);}
© www.soinside.com 2019 - 2024. All rights reserved.