首先,String()和toString()方法都是將其它類型的變量轉換為字符串的方法。但兩者存在一定的區別:
x.toString(): 無法轉換null和undefined:
來看下面的小例子:
var a=123; var b=true; var c;
var d=null; console.log(a.toString()); console.log(b.toString()); console.log(c.toString());
console.log(d.toString());
運行上面的代碼我們得到下面的結果:
123
1
Uncaught TypeError: Cannot read property 'toString' of undefined(…)
Uncaught TypeError: Cannot read property 'toString' of null(…)
通過上面的答案我們不難看出第一行和第二行都是有輸出結果的分別為"123"和"1",如果不能確定該結果是否為string類型的我們可以使用typeof()方法來查看數據的類型,該方法返回值為數據類型的關鍵字。
var b=123; typeof(b.toString());//返回結果為"string"
第三行的運行結果報錯了,Uncaught TypeError: Cannot read property 'toString' of undefined(…)這句話的意思為:未捕獲:無法讀取屬性的toString定義,也就是說我們對於c這個變量沒有賦值,不能找到該值,所以不能轉換。
同樣的第四行代碼也是出錯的,Uncaught TypeError: Cannot read property 'toString' of null這句話的意思未捕獲TypeError:無法讀取屬性的toString null,意思為類型為null的變量不能應用該方法。
為了解決上面的為題我們自己重寫toString()方法,代碼如下:
function String(x){ if(x===undefined){ return "undefined"; }else if(x===null){ return "null"; }else{ return x.toString(); } }
通過上面的代碼我們很好的規避了剛才發生錯誤的兩個地方。
下面我們來看String()方法:
var a=123; var b=true; var c; var d=null; console.log(String(a)); console.log(String(b)); console.log(String(c)); console.log(String(d));
運行上面代碼我們不難得到下面的四個值:
123
true
undefined
null
通過相同代碼的比較,我們可以得出String()方法較toString()方法應用范圍上要更加廣泛。