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

标签 javascript

我目前正在研究 MDN JavaScript 文档,并且在其中一个初学者练习中它声称:( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Evaluating_variables )

undefined 值在 bool 上下文中使用时表现为 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。

关于javascript - 未定义的 array.length 返回 true 而不是 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55260039/

相关文章:

javascript - 如何通过javascript添加<span>?

javascript - 如何检测浏览器是否支持 MJPEG?

javascript - 在 javascript var 中添加 php

javascript - 在 10,..9,... 脚本中重定向

javascript - 使用 firefox 扩展获取 SSL 信息

javascript - 从类中获取InnerHTML

javascript - 每个星期五直到某个日期,但以实用的方式?

javascript - 如何让 ngclick 像切换一样工作?

使用 Excel VBA 在 Chrome 中注入(inject) Javascript

javascript - 使用 html 文本响应组件