关于 -[1,] 的疑问

发现js中-[1,]的返回值为-1
以此类推,-[2,]或者+[2,],返回值为-2和2;
但是如果是+[1,2]或者是-[1,2],则返回值为NaN
请各位大神解释下这其中的原理
蓝山帝景
浏览 352回答 2
2回答

忽然笑

这里面涉及两个问题:一是JavaScript数组中trailingcomma的处理,二是JavaScript中数组的类型转换。关于trailingcomma:ES5忽略trailingcomma,认为[1,]与[1]一样,都表示一个有单一元素的数组(但只实现了ES3的JS引擎可能不这么认为)。//现代浏览器或Node.js环境[1,].length//=>1[1].length//=>1ES5Spec:11.1.4:Edition5clarifiesthefactthatatrailingcommaattheendofanArrayInitialiserdoesnotaddtothelengthofthearray.ThisisnotasemanticchangefromEdition3butsomeimplementationsmayhavepreviouslymisinterpretedthis.所以,在实现了ES5的JS引擎里,[1,]实际上就是[1]。关于数组的类型转换:基本步骤:调用内部toPrimitive方法---->调用[[DefaultValue]]方法(以Number作为hint)---->调用数组的valueOf()方法,然而并未得到原始值---->调用数组的toString()方法,得到String类型值---->用一元取反运算符(-)或运算符(+)处理,得到Number类型值。-[1]的处理过程:-[1]------>-'1'--------->-1-[1,2]的处理过程:-[1,2]------>-'1,2'--------->-NaN-[]的处理过程:-[]-------->-''--------->-0这是一个看标准就能解决的问题,不过在生产环境中,不要在数组中使用trailingcomma。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript