什么是一元+在Javascript中使用?

我find了一些来自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)是什么?

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

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

这是一元+运算符。 这个网站有一个伟大的文章,它的使用与不同的数据types的JavaScript。

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

我会偷的介绍,但它真的值得阅读,如果你在JavaScript。

在JavaScript中,可以在单个元素之前单独使用+运算符。 这表示一个math运算,并尝试将元素转换为数字。 如果转换失败,它将评估为NaN。 当需要快速将string转换为数字时,这是特别有用的,但也可以用于其他types的select集。

一元+运算符在string以外的types上使用时,会内部尝试调用valueOf()或toString()(按此顺序),然​​后尝试将结果转换为数字。 因此,一元+运算符可以成功转换许多本地JStypes,但有一定的限制:

这是testing,如果obj.length是数字。

对string进行算术运算将其转换为整数(和+是一元操作..它不会做任何事情:-)),并且===操作符按types进行比较

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

我会build议你试试这个

console.log(typeof +“3”)=数字

console.log(typeof“3”)= string

这使一切都清楚。