在下划线的最新代码中,第 211 行,内容为
result || (result = iterator.call(context, value, index, list))) return breaker;
是否需要 or 语句?可以换成
(result = iterator.call(context, value, index, list))) return breaker; // ?
result
最初设置为 false,除了这一行之外,代码中没有其他地方被修改。
请注意,如果 JavaScript 或 (||) 语句为真,则返回第一个操作数,如果它('it' 是第一个操作数)为假,则返回第二个操作数。这直接来自 Crockford, The Good Parts。还注意到 || 做一个或与真/假值不是真/假值。
这是从上面的链接复制的整个方法:
var any = _.some = _.any = function(obj, iterator, context) {
iterator || (iterator = _.identity);
var result = false;
if (obj == null) return result;
if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);
each(obj, function(value, index, list) {
if (result || (result = iterator.call(context, value, index, list))) return breaker;
});
return !!result;
};