下面是笔试或面试经常会遇到的关于字符串与数字加减的问题:
var foo = "11"+2-"1";
console.log(foo); //111
console.log(typeof foo); //number
var foo = "11"+2+"1";
console.log(foo); //1121
console.log(typeof foo); //string
好吧在不知道规则前我做错了。
下面是“+”与“-”在字符串与数字运算时的规则,了解之后就完全能理解为什么会是这样的答案了。
1、‘’+‘’
1)如果两个操作数都是字符串,则将第二个操作数与第一个操作数拼接起来(相当于字符串的concat()方法);
2)如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再将两个字符串拼接起来,结果为字符串;
3)如果有一操作数为对象,数字或者布尔值,则调用它们的toString()方法取得相应的字符串的值,然后再应用前面关于字符串的规则。
特殊):对于Undefined和null,则分别调用String()方法并取得字符串”undefined”和“null”。
2、‘’-‘’
1)如果两个操作数都是字符串,则其结果为NaN,因为字符串不能进行减运算;
2)如果有一个操作符是字符串,布尔值,null或者undefined,则先在后台调用Number()函数将其转换为数值,然后再执行数和数字之间的减法运算(此处与加法相反,即字符串与数字相减返回数字)如果转换的结果为NaN,那么得到的结果就是NaN;
特殊):Number()函数的转换规则中:如果是null值,则返回0;如果是undefined,则返回NaN。
之后再回顾一遍开始的两个例子,便一目了然。