一元 + 在 Javascript 中的用途是什么?

IT技术 javascript
2021-01-20 12:09:14

我从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个回答

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

如果是数字,则该值不会更改,并且比较返回 true。
如果它不是数字,则断言为假。

@amnotiammethod的意思way@Cybrix 如果您想知道if (l == +l) r.l = o.l;代码中的用途:如果传递的对象是数组(类似)对象,则results列表还会获取obj对象的长度相关代码也可以在_.each->Array.prototype.forEach方法(函数 ;))中看到
2021-04-03 12:09:14
当你说“方法”时,我确定你不是指函数/方法,但它可能会让某人感到困惑。;)
2021-04-08 12:09:14

那是一元 + 运算符。这个网站有一篇很棒的文章,介绍了它在 javascript 中使用不同数据类型的情况。

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

我将窃取介绍,但如果您对 javascript 感兴趣,它确实值得一读。

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

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

这是测试,如果obj.length是数字。

对字符串进行算术运算将其转换为整数(+ 是一元运算.. 不做任何事情 :-) ),并且 === 运算符进行类型比较

a === b <=> (a == b) && (typeof a) == (typeof b)

我会建议你试试这个

console.log(typeof +"3") = 数字

console.log(typeof "3") = 字符串

这让一切都清楚了。