javascript中的obj.length === + obj.length

Tam*_*mil 28 javascript underscore.js

在我遇到的许多地方的underscore.js源代码中

if (obj.length === +obj.length)
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下,他们为什么要用它?

bri*_*vis 31

这是另一种写作方式if (typeof obj.length == 'number').为什么他们这样做,这是任何人的猜测.可能试图以牺牲可读性为代价来聪明.不幸的是,这些日子并不常见......

虽然它可能会被minifiers(YUI Compressor,Closure Compiler,UglifyJS等)压缩得更多:

(a.length===+a.length) VS (typeof a.length=='number')

按照自己的方式执行将节省5个字节,每个实例.


Fré*_*idi 25

这测试obj的是length属性是否为数字.

一元+运算符它的操作数变换为号码,并且全等运算符的结果与原始比较length属性不进行类型强制.

因此,表达式仅为trueif obj.length是实际数字(不是例如可以转换为数字的字符串).