今天面试又被问到+-操作符。
因为一直会用
''+数字
这样来得到一个字符,然后就会一直觉得+是会将数字转成字符串。
然后今天被问到这些的时候懵了,之前其实也看过,但是忘记了,并且时间长就混淆了。
首先面试官亮出笔试的一道题:
以下哪个的结果不是Number类型的-100
Number('-100')
+'-100'
parseInt('-100')
-'-100'
我当时选了+'-100'就是因为混淆了吧,觉得会像''+数字一样结果是得到字符类型。但是!完全不是,我们要具体问题具体分析。
单拎出来+'-100'和-'-100'来看。+和-是一元加和减。
一元加:对数值没有影响,对非数值,执行和Number转型函数一样的类型转换:布尔值false和true转为0和1,数值字符转为Number,对象会调用valueOf()和toString()
一元减对数值取负值,对非负值遵循和一元加一样的规则。
而刚才提到的''+0是加法操作符
加法操作符:
如果两个操作数都是数值,执行加法运算。
1.如果两个操作数都是字符串,将第二个字符串拼接到第一个字符串后面;
2.只有一个是字符串,则将另一个操作数转换为字符串,再将两个字符串拼接在一起。
3.任一方是对象、数值和布尔值,调用它们得toString()方法以获取字符串,然后再应用1.2规则。
4.对于undefined和null调用String()函数,分别获取"undefined"和"null"
减法操作符:
如果两个操作数都是数值,执行减法运算。
1.如果有任一操作数是字符串、布尔值、null和undefined,则先在后台使用Number()将其转换为数值,然后执行数学运算。转换结果为NaN,那么结果就是NaN
2.如果有任一操作数是对象,调用其valueOf()方法取得表示它的数值,如果该值是NaN,则减法计算的结果是NaN。如果对象没有valueOf方法,则调用其toString()方法,然后再将得到的字符串转换未数值。