当我尝试访问不存在的属性时,为什么 javascript 没有抛出类型错误?
我的代码如下
var array = [];
var someBoolean1 = array[0] && array[0].hey;
someBoolean 的值原来是'undefinded';我预计 javaScript 会抛出类型错误;
当我做的时候
var array = [];
var someBoolean2 = array[0].hey;
按预期抛出类型错误。
但是我不明白为什么第一段代码没有类型错误。
有什么想法吗?
因为你明确地防止了类型错误...
array[0] && array[0].hey
array[0]
是未定义的,所以:
undefined && array[0].hey
undefined
是 falsey,所以右边不计算,所以这个表达式的结果是左边的值 undefined
, 分配给 someBoolean1
.
Tangentially... 为了减少这种表达的重复性,通常使用这个成语:
var someBoolean1 = (array[0] || {}).hey;
如果array[0]
是undefined
, {}
将被使用,然后是属性 .hey
该对象的将被访问。如果array[0]
是具有属性 .hey
的对象,你会得到它的值(value),否则你会安全得到undefined
在整个表达式中。