如果数组变量为null,这个javascript函数是否返回一个布尔值?

时间:2017-05-19 04:37:52

标签: javascript

我在javascript代码库上工作,我一直看到这种编码风格,这让我感到困惑。

var someArray = getSomeArray();
var itemInArray = someArray && someArray["someitem"];
return itemInArray;

我对代码中的第二行感到困惑。这是它在做什么?检查someArray变量是否为null然后返回数组内的元素?那么如果someArray对象为null,它会返回什么?

2 个答案:

答案 0 :(得分:1)

如果getSomeArray()中的数组有可能为null或未定义,则此代码模式非常有用。

前半部分检查是否存在真值(对象或数组是真的),然后检查对象是否具有属性someItem的真值。如果它是一个数组并且该属性具有值,则返回一个真值布尔值,否则返回false值。

如果您尝试访问myArray["someItem"]且myArray未定义,则会引发异常。

答案 1 :(得分:1)

JavaScript中的逻辑运算符与其他编程语言的行为不同。

MDN提到运算符AND(&&)的行为方式如下:

expr1 && expr2

  

如果可以转换为expr1,则返回false;否则,返回   expr2。因此,当与Boolean值一起使用时,&&如果两者都返回true   操作数是true;否则,返回false

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Logical_operators

为什么要使用它?

如果"someitem" falsy (评估为false),该代码的目的是阻止访问someArray的{​​{1}}密钥。

现在,这是实现这一目标的一种非常隐含的方式。更明确的方法是:

someArray

现在,请不要将对象称为数组。更好的标识符可能是typeof(obj) === 'object' && obj['someItem'] 而不是someObject