Javascript 如果在[未定义]上进行测试

Javascript 如果在[未定义]上进行测试,javascript,arrays,if-statement,conditional,undefined,Javascript,Arrays,If Statement,Conditional,Undefined,[undefined]==true返回false if([undefined]){ console.log('is true') } 将为真打印到控制台 这有什么意义?使用三个等号来确定值和类型是否相同;这就是为什么1==true但是1!==正确 if语句试图计算[undefined],但仅限于它是真实的还是虚假的[undefined]是一个非空数组,因此它是truthy,并在if语句中计算为true。但是,[undefined]本身并不是布尔值,因此[undefined]===true的计算

[undefined]==true
返回
false

if([undefined]){
console.log('is true')
}
为真
打印到控制台


这有什么意义?

使用三个等号来确定值和类型是否相同;这就是为什么
1==true
但是
1!==正确

if语句试图计算
[undefined]
,但仅限于它是真实的还是虚假的
[undefined]
是一个非空数组,因此它是truthy,并在if语句中计算为
true
。但是,
[undefined]
本身并不是布尔值,因此
[undefined]===true
的计算结果为false


这在某种程度上解释了发生了什么:

请为您使用的语言添加一个标记(javascript?)试试
布尔([未定义])
@John:Slick!谢谢我想这就是条件测试的结果吧?我应该用不同的方式写我的问题。我的新的/真正的问题是为什么if
[undefined]==true
返回
false
if([undefined]){}
分支将执行。如果不是通过与
true
进行比较,如何确定“真实性”?@fuzzybear3965“所有值都是真实的,除非它们被定义为falsy(即,除了false、0、”、null、未定义和NaN)。“这是一个好的开始。但是,它没有解释为什么
[undefined]==true
会返回
false
,因为它显然是真实的。因为真实与“equals true”不同。当你进行显式布尔比较时,依赖真实性可能会得到不同的结果。这是你在JS编程中必须注意的一个大陷阱;我刚刚去掉了那一点。但是,是的……JavaScript在这方面很有趣。