js中的奇言妙语之"+"
本文是由一张图片引发的思考,首先,请看图:
如果以上内容你全部答对,本文就没有阅读的必要了,当然了,如果有兴趣,也可以稍微看看。
知识说明
其实上面的式子主要涉及js中运算符+
的理解。+
在js中有两个作用:
- 作为一元运算符,用于显示地将操作数转化为数字。
- 作为二元运算符,对两个操作数做拼接操作。这里拼接有几个基本规则:
a. 如果其中一个操作数是对象(数组),可以简单地理解为调用toString()
方法。实际上是先对其调用ToPrimitive
抽象操作该抽象操作再调用[[DefaultValue]]
,以数字作为上下文。
b. 如果+
的其中一个操作数是字符串(或者通过以上步骤可以得到字符串),则执行字符串拼接
c.否则执行数字加法。
题目解答
NaN
是一个特殊的number
,我理解为不是数字的数字,并且NaN==NaN
返回值为false
,是javascript中不等于自己的特殊值。- 整数精度到15位,小数到17位。
Math.max()
是返回参数中的最大值,有参数不能转化成数字则返回NaN
,没参数,也就是返回默认的最小值-Infinity
。min()
同理。[]
会被强制转换成""
,{}
会被强制转换成[object Object]
{}+[]
这里比较特殊,第一个{}
会被当作空代码块,所以结果就。是+[]=>0
。true
为1
,false
为0
。但类型不同,一个为boolean
,一个为number
-
是数字减法运算符,因此-a
会做强制转换。- 最后说一下
(!+[]+[]+![]).length
,这道题比较有意思。
首先根据上文的分析,+[]
(相当于+""
)返回0
;
!
可以理解为做boolean
转化,所以!+[]
(相当于!0
)返回true
;
![]
相当于!true
(js中[]/{}
都为true
),返回false
;
所以!+[]+[]+![]
可以转化成true+""+false
,结果返回字符串"truefalse"
,所以对应的length
为9。