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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章