什么是一元+用于Javascript?

Cyb*_*rix 14 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;
  };
Run Code Online (Sandbox Code Playgroud)

我想知道是什么if (obj.length === +obj.length)

Rob*_*b W 12

+length 是一种将任何东西转换为数字的方法.

如果它是数字,则值不会更改,并且比较返回true.
如果它不是数字,则断言是错误的.


mrt*_*man 6

那是一元+算子.这个网站有一篇关于它在javascript中使用不同数据类型的精彩文章.

http://xkr.us/articles/javascript/unary-add/

我会窃取介绍,但如果你使用的是javascript,那真的值得一读.

在JavaScript中,可以在单个元素之前单独使用+运算符.这表示数学运算并尝试将元素转换为数字.如果转换失败,它将评估为NaN.当想要快速将字符串转换为数字时,这尤其有用,但也可以在其他类型的选择集上使用.

当在字符串以外的类型上使用时,一元+运算符将在内部尝试调用valueOf()或toString()(按此顺序),然​​后尝试将结果转换为数字.因此,一元+运算符可以成功地转换许多具有某些限制的本机JS类型: