我在 underscore.js 源代码中遇到了以下代码行:
function (obj, iterator, context) {
iterator || (iterator = _.identity);
...
}
该语法是否等效于:
if (!iterator) {
iterator = _.identity;
}
除了将语句减少到一行之外,使用前一种语法是否有任何性能优势?
我在 underscore.js 源代码中遇到了以下代码行:
function (obj, iterator, context) {
iterator || (iterator = _.identity);
...
}
该语法是否等效于:
if (!iterator) {
iterator = _.identity;
}
除了将语句减少到一行之外,使用前一种语法是否有任何性能优势?
是的,它在功能上与此等价。
这样做的唯一好处是你的支票少了两行。
这是布尔短路评估的效果。基本上,布尔表达式的求值在其结果确定后立即停止:
true || func()
在这种情况下,永远不会调用 func(),因为无论它返回什么,整个表达式的值仍然是true
.
false && func()
同样,在这种情况下 func() 也根本没有被调用,因为无论它返回什么,表达式都将保持false
.