javascript加性操作符:操作数中有null和undefined的情况

来源:互联网 发布:怀孕软件排行第一 编辑:程序博客网 时间:2024/05/22 14:38

在《javascript 高级程序设计》第三版中,3.5.5小节讲述加性操作符,其中关于操作数有undefined和null有误。原文是:对于undefined和null,则分别调用String()函数并取得"undefined"和“null”。然而,实际操作并非如此。

1.操作数中有undefined的情况

var a = undefined;var b = null;console.log(a+b); //NaNvar a = undefined;var b = 1;console.log(a+b);//NaNvar a = undefined;var b = '1';console.log(a+b);//undefined1var a = undefined;var b = true;console.log(a+b); //NaNvar a = undefined;var b = {};console.log(a+b);//undefined[object Object]var a = undefined;var b = {toString:function(){return '+toString'}};console.log(a+b);//undefined-toString 如果操作数中有一个是对象,则调用toString()方法取得相应的字符串然后在相加。书中原话,看后面个例子证明这句话错了var a = undefined;var b = {valueOf:function(){return '-toString'}};console.log(a+b);//undefined-toString 如果操作数中有一个是对象,则调用toString()方法或valueOf()取得相应的字符串然后在相加

总结:据上述结果推测,如果操作数中有一个是对象或者是字符串,则取得相对应的字符串值,然后与另一个操作数相拼接。如果操作数中有一个是布尔值,则将布尔值转化为数值,同时将另一个操作数也转换为数值,undefined转化为数值是NaN,所以布尔值与undefined相加结果为NaN。如果操作数中有一个是数值,则另一个操作数也转换为数值,于是数值和undefined相加为NaN。

2.操作数中有null的情况

var a = null;var b = 1;console.log(a+b); //1var a = null;var b = '1';console.log(a+b); //null1var a = null;var b = true;console.log(a+b); //1var a = null;var b = false;console.log(a+b); //0var a = null;var b = {toString:function(){return '-toString'}};console.log(a+b); //null-toString

总结,操作数中在有对象或者字符串的情况下,两个操作数转换为字符串,然后相拼接。在操作数有一个是布尔或者数值的情况下,null就要通过数值转换为0.

3.操作数中有布尔值的情况

var a = {};var b = true;console.log(a+b); //[object Object]truevar a = 1;var b = true;console.log(a+b); //2var a = '1';var b = true;console.log(a+b); //1truevar a = true;var b = true;console.log(a+b); //2var a = false;var b = true;console.log(a+b); //1

总结:如果有一个操作数布尔值,另外一个操作数为对象或者字符串,那么就将布尔值转换为字符串然后进行拼接。如果有一个操作数为布尔值,另一个操作数不为对象或者字符串,则将这两个操作数都转换为数值,然后按数值相加。

0 0