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

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

1.操作数中有undefined的情况

var a = undefined;
var b = null;
console.log(a+b); //NaN

var a = undefined;
var b = 1;
console.log(a+b);//NaN

var a = undefined;
var b = '1';
console.log(a+b);//undefined1

var a = undefined;
var b = true;
console.log(a+b); //NaN

var 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); //1

var a = null;
var b = '1';
console.log(a+b); //null1

var a = null;
var b = true;
console.log(a+b); //1

var a = null;
var b = false;
console.log(a+b); //0

var 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]true

var a = 1;
var b = true;
console.log(a+b); //2

var a = '1';
var b = true;
console.log(a+b); //1true

var a = true;
var b = true;
console.log(a+b); //2

var a = false;
var b = true;
console.log(a+b); //1

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

发布了28 篇原创文章 · 获赞 2 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章