我找到了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;
};
我想知道if (obj.length === +obj.length)
做了什么?
答案 0 :(得分:12)
+length
是一种将任何内容转换为数字的方法。
如果是数字,则值不会改变,并且比较返回true 如果它不是数字,则断言是错误的。
答案 1 :(得分:6)
这是一元+运算符。这个网站有一篇关于它在javascript中使用不同数据类型的文章。
http://xkr.us/articles/javascript/unary-add/
我会窃取介绍,但如果你使用的是javascript,那真的值得一读。
在JavaScript中,可以在a之前单独使用+运算符 单个元素。这表示数学运算并尝试转换 元素到数字。如果转换失败,它将评估为 NaN的。当想要将字符串转换为a时,这尤其有用 快速编号,但也可以用于其他类型的选定集。
一元+运算符,当用于字符串以外的类型时,将会 内部尝试调用valueOf()或toString()(按此顺序)和 然后尝试将结果转换为数字。因此,一元+ operator可以成功转换许多本机JS类型 某些限制:
答案 2 :(得分:2)
这是测试,如果obj.length
是数字。
对字符串进行算术运算将其转换为整数(并且+是一元运算..它不做任何事情:-)),而===运算符进行类型比较
a === b <=> (a == b) && (typeof a) == (typeof b)
答案 3 :(得分:0)
我建议你试试这个
console.log(typeof +&#34; 3&#34;)= number
console.log(typeof&#34; 3&#34;)= string
这使一切都清楚。