我在underscore.js源代码中遇到了以下代码:
function (obj, iterator, context) {
iterator || (iterator = _.identity);
...
}
该语法是否等同于:
if (!iterator) {
iterator = _.identity;
}
除了将语句缩减为一行之外,使用前一种语法是否有任何性能优势?
答案 0 :(得分:2)
是的,它在功能上等同于此。
这样做的唯一好处就是你的支票占用了两行。
答案 1 :(得分:1)
这是boolean short-circuit evaluation的效果。基本上,布尔表达式的计算一旦确定结果就会停止:
true || func()
在这种情况下,永远不会调用func(),因为无论它返回什么,整个表达式的值仍然是true
。
false && func()
同样,在这种情况下,func()也根本不被调用,因为无论它返回什么,表达式都将保持false
。