This question already has answers here:
Does a javascript if statement with multiple conditions test all of them?
(9个答案)
4年前关闭。
我正在使用
最初,当返回
这可行,但我想更好地理解为什么现在可以执行新语句。解释器现在执行`numberOfDigits.length吗?
另外,当操作数反转为
这是完整的JavaScript代码:
更新1:
以下答案说明:
JavaScript优化了
如果
伪造的值是:
这是
(9个答案)
4年前关闭。
我正在使用
match
和length
属性检查字符串中的位数。这是带有我的函数http://codepen.io/PiotrBerebecki/pen/redMLE的codepen最初,当返回
numberOfDigits.length
时,我收到一条错误消息(Cannot read property 'length' of null
)。我已通过将行更改为(numberOfDigits && numberOfDigits.length)
解决了此问题。这可行,但我想更好地理解为什么现在可以执行新语句。解释器现在执行`numberOfDigits.length吗?
另外,当操作数反转为
(numberOfDigits.length && numberOfDigits)
时,为什么会出现相同的错误?这是完整的JavaScript代码:
function checkLength(str) {
let numberOfDigits = str.match(/\d/g);
return (numberOfDigits && numberOfDigits.length);
}
console.log( checkLength('T3xt w1th sOme numb3rs') );
console.log( checkLength('Text with some numbers') );
更新1:
以下答案说明:
&&
表达式中的操作数顺序计数。 &&
运算符,如果第一个操作数求值为null,则JavaScript不会检查第二个操作数,因为该表达式除null
/ false
以外,其他任何取值都不能求值。 最佳答案
JavaScript尝试优化&&
运算符:
numberOfDigits && numberOfDigits.length
如果
numberOfDigits
是一个伪造的值(而null
是伪造的),则整个表达式将是伪造的,不需要评估numberOfDigits.length
。伪造的值是:
undefined
,null
,0
,''
,false
,NaN
。检查某些事物是否虚假的一种方法是使用Boolean(falsyValue) === false
(或更实用,但不太冗长的! falsyValue
)。这是
&&
运算符的副作用。我可以建议避免使用它,并将代码转换为可读的内容:function checkLength(str) {
let numberOfDigits = str.match(/\d/g);
return Array.isArray(numberOfDigits) ? numberOfDigits.length : 0;
}
07-26 08:00