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/