什么是一元+用于Javascript?

时间:2012-01-31 15:11:16

标签: javascript

我找到了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)做了什么?

4 个答案:

答案 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

这使一切都清楚。