0

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

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

该语法是否等效于:

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

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

4

2 回答 2

2

是的,它在功能上与此等价。

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

于 2012-05-23T19:24:26.253 回答
1

这是布尔短路评估的效果。基本上,布尔表达式的求值在其结果确定后立即停止:

true || func()

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

false && func()

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

于 2012-05-23T19:35:15.820 回答