我在javascript代码库上工作,我一直看到这种编码风格,这让我感到困惑。
var someArray = getSomeArray();
var itemInArray = someArray && someArray["someitem"];
return itemInArray;
我对代码中的第二行感到困惑。这是它在做什么?检查someArray变量是否为null然后返回数组内的元素?那么如果someArray对象为null,它会返回什么?
答案 0 :(得分:1)
如果getSomeArray()
中的数组有可能为null或未定义,则此代码模式非常有用。
前半部分检查是否存在真值(对象或数组是真的),然后检查对象是否具有属性someItem
的真值。如果它是一个数组并且该属性具有值,则返回一个真值布尔值,否则返回false值。
如果您尝试访问myArray["someItem"]
且myArray未定义,则会引发异常。
答案 1 :(得分:1)
JavaScript中的逻辑运算符与其他编程语言的行为不同。
MDN提到运算符AND(&&
)的行为方式如下:
expr1 && expr2
:
如果可以转换为
expr1
,则返回false
;否则,返回expr2
。因此,当与Boolean
值一起使用时,&&
如果两者都返回true
操作数是true
;否则,返回false
。
如果"someitem"
falsy (评估为false),该代码的目的是阻止访问someArray
的{{1}}密钥。
现在,这是实现这一目标的一种非常隐含的方式。更明确的方法是:
someArray
现在,请不要将对象称为数组。更好的标识符可能是typeof(obj) === 'object' && obj['someItem']
而不是someObject
。