为什么此警报返回未定义

Why this alert returns undefined

本文关键字:返回 未定义 为什么      更新时间:2023-09-26
alert(0==false);   //true; as expected
alert("a"[0]);     //a; as expected
alert("a"[false]); //undefined; why?

那为什么呢?

每当您试图通过括号表示法访问属性时,表达式的值都会转换为字符串。因此,"a"[false]实际上是"a"['false'],而"a"[0]实际上是"a"['0']。两个属性名称显然非常不同。。

0==false中,false被转换为一个数字,它实际上是0


换句话说:Number(false)String(false)产生两个不同的值,因此,即使0 == false"a"[0] !== "a"[false]

字符串"a"只有一个0索引,这是第一个也是唯一的字符。

0 == falsetrue,因为0是falsy,但0 === falsefalse,因为它们不是同一类型,传递false作为索引不会使其成为数字0,即使它们都评估为falsy也是如此,这就是为什么它是undefined

JavaScript对象只有一个0索引。

所以

"a"[0] //'a'
"a"[1] //undefined
"a"[false] //undefined