为了账号安全,请及时绑定邮箱和手机立即绑定

关于 -[1,] 的疑问

关于 -[1,] 的疑问

蓝山帝景 2019-04-13 08:36:36
发现js中-[1,]的返回值为-1以此类推,-[2,]或者+[2,],返回值为-2和2;但是如果是+[1,2]或者是-[1,2],则返回值为NaN请各位大神解释下这其中的原理
查看完整描述

2 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

这里面涉及两个问题:一是JavaScript数组中trailingcomma的处理,二是JavaScript中数组的类型转换。
关于trailingcomma:
ES5忽略trailingcomma,认为[1,]与[1]一样,都表示一个有单一元素的数组(但只实现了ES3的JS引擎可能不这么认为)。
//现代浏览器或Node.js环境
[1,].length//=>1
[1].length//=>1
ES5Spec:
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。
                            
查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 351 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信