如果你使用像_.some()
之类的循环习惯用法,但是没有传入迭代器函数则会出错。然而,下划线将用身份功能取代它并继续运行。
为什么:来自underscore
var any = _.some = _.any = function(obj, iterator, context) {
iterator || (iterator = _.identity); // this line?
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;
};
案例用法:
_.some([0,1,2,3], null);
答案 0 :(得分:2)
但是没有传递迭代器函数出错的地方。
完全没有。 iterator
是一个可选参数,默认情况下,_.some()
将自行测试集合的元素真实性。这是demonstrated in the docs:
_.some([null, 0, 'yes', false]);
=> true
iterator
只允许您指定自己的条件:
_.some([ 1, 2, 3, 4, 5 ], function (x) { return x > 6; })
=> false
包括测试元素成员的真实性:
_.some([ { value: 0 }, { value: 1 } ], function (x) { return x.value; });
=> true
答案 1 :(得分:1)
因为..为什么不应该运行?
这是 API设计选择,只是让它“早退”(与正常应用识别功能相比)会改变行为。这是因为身份功能有效地传递了价值观的真实性(
)。_.some([0,undefined,null,""]) // false
_.some([1]) // true