我从Underscore.js找到了一些代码
_.map = _.collect = function(obj, iterator, context) {
var results = [];
if (obj == null) return results;
if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
each(obj, function(value, index, list) {
results[results.length] = iterator.call(context, value, index, list);
});
if (obj.length === +obj.length) results.length = obj.length;
return results;
};
Run Code Online (Sandbox Code Playgroud)
我想知道是什么if (obj.length === +obj.length)
?
那是一元+算子.这个网站有一篇关于它在javascript中使用不同数据类型的精彩文章.
http://xkr.us/articles/javascript/unary-add/
我会窃取介绍,但如果你使用的是javascript,那真的值得一读.
在JavaScript中,可以在单个元素之前单独使用+运算符.这表示数学运算并尝试将元素转换为数字.如果转换失败,它将评估为NaN.当想要快速将字符串转换为数字时,这尤其有用,但也可以在其他类型的选择集上使用.
当在字符串以外的类型上使用时,一元+运算符将在内部尝试调用valueOf()或toString()(按此顺序),然后尝试将结果转换为数字.因此,一元+运算符可以成功地转换许多具有某些限制的本机JS类型:
归档时间: |
|
查看次数: |
6568 次 |
最近记录: |