javascript - 如果第一个表达式在 OR 运算符中计算结果为 True,JS 会跳过后面的表达式,这有关系吗?

标签 javascript

JS 新手。这可能是显而易见的,但我很好奇是否存在边缘情况,这种行为可能会产生意想不到的影响? (即,在 if 语句中使用 OR 时,后面的表达式在某种程度上很重要)

最佳答案

这称为short circuit evaluation ,它对各种事情都有用。它也不是 Javascript 所独有的。

这是一些依赖短路评估的神奇代码

var person1 = {
   age: 13
};

console.log( "Person 1 age: " + 
    ((typeof person1 !== 'undefined' && person1.age) ? person1.age : "N/A") );
console.log( "Person 2 age: " + 
    ((typeof person2 !== 'undefined' && person2.age) ? person2.age : "N/A") );

如您所见,人员 2 不存在,但此代码不会引发错误,因为短路评估检查从未达到 person2.age

缺点是,在大多数情况下,这不会对您造成伤害,而且会加快您的代码速度。如果您对代码缺乏了解,它可能会无意中破坏您的代码,例如在 if 语句内分配或添加其他逻辑操作时。

var person1 = {
   age: 13
};

var counter = 0;

console.log( "Person 1 age: " +
    ((typeof person1 !== 'undefined' && person1.age && ++counter) ? person1.age : "N/A") );
console.log( "Person 2 age: " +
    ((typeof person2 !== 'undefined' && person2.age && ++counter) ? person2.age : "N/A") );

console.log(counter);

上面的计数器将为 1。如果 person2 对象存在并且具有 age 属性,则计数器将为 2。

这个问题可以通过重构代码来解决。

关于javascript - 如果第一个表达式在 OR 运算符中计算结果为 True,JS 会跳过后面的表达式,这有关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35417148/

相关文章:

javascript - 使用 Three.js 更改 a-frame 场景中 gltf-model 的位置

javascript - react 格式问题

javascript - Tooltipster 不适用于动态生成的元素

javascript - Angular 2 typescript 编译器错误

javascript - 绑定(bind)img src

javascript - Divi Wordpress 主题 - 更改幻灯片转换速度

javascript - 当我实例化一个新类时使用 .call

javascript - 在 jQuery timeago.js 中本地化字符串

javascript - 使用 Javascript 更改 URL 的 CSS