var exists或var获取值语法?

时间:2012-05-23 19:22:14

标签: javascript

我在underscore.js源代码中遇到了以下代码:

function (obj, iterator, context) {
  iterator || (iterator = _.identity);
  ...
}

该语法是否等同于:

if (!iterator) {
  iterator = _.identity;
}

除了将语句缩减为一行之外,使用前一种语法是否有任何性能优势?

2 个答案:

答案 0 :(得分:2)

是的,它在功能上等同于此。

这样做的唯一好处就是你的支票占用了两行。

答案 1 :(得分:1)

这是boolean short-circuit evaluation的效果。基本上,布尔表达式的计算一旦确定结果就会停止:

true || func()

在这种情况下,永远不会调用func(),因为无论它返回什么,整个表达式的值仍然是true

false && func()

同样,在这种情况下,func()也根本不被调用,因为无论它返回什么,表达式都将保持false