alert(0==false); //true; as expected
alert("a"[0]); //a; as expected
alert("a"[false]); //undefined; why?
为什么?
答案 0 :(得分:6)
每当您尝试通过括号表示法访问属性时,表达式的值将转换为字符串。因此,"a"[false]
,实际上是"a"['false']
,而"a"[0]
实际上是"a"['0']
。两个属性名称显然都非常不同。
在0==false
中,false
转换为数字,确实是0
。
换句话说:Number(false)
和String(false)
生成两个不同的值,因此即使0 == false
,"a"[0] !== "a"[false]
。
答案 1 :(得分:3)
字符串"a"
只有一个0
索引,这是第一个也是唯一一个字符。
0 == false
为true
,0
为假,但0 === false
为false
,因为它们的类型不同,并且传递false
因为索引不会使它成为0
的数字,即使它们都评估为假,这就是为什么它是undefined
答案 2 :(得分:0)
JavaScript对象只有0索引。
所以
"a"[0] //'a'
"a"[1] //undefined
"a"[false] //undefined