js中toString 和 object.toString區別解釋
1.toString 和 object.toString執行結果演示
var str = 'this is string';
alert(str.toString());
執行結果:
var str = 'this is string';
alert(toString(str));
執行結果:
所以從上述執行結果得知object.toString()只是輸出該物件的資訊,並以字元表示,和許多其他的語言諸如java的object.toString()一樣,但是js提供的內建函式toString()輸出的結果為"[object Window]",這和str物件沒人任何聯絡,接下來我只對toString()方法詳解。
2.toString()詳解
ECMA 5.1 中關於該方法的描述是這樣的:
當呼叫toString方法時,下列步驟會被執行:
如果this未定義時,返回“[object Undefined]”
如果this為null時,返回“[object Null]”
定義O,並且讓O=ToObject(this)
定義class,並且使class為O內建屬性[[class]]的值
返回三個字串的拼接字元:"[object",class,"]"
通過官方解釋,可以清晰的得出toString()是在以特殊的字串形式輸出this的型別,不管你傳入什麼引數,該方法都是執行了window.toString()方法,this一直指向了window物件,所以輸出了上述結果。
3.怎麼使用toString()方法判斷任意型別
通過上面對toString的講解可知,toString()始終判斷的是this的型別,那麼只要將this指向其他物件,就能判斷該物件的型別。
到了這步就比較清楚了,js中改變this有那種方式,一種是call方法,另一種是apply方法,我們可以通過實驗看看有沒有達到我們想要的結果。
var str = 'this is string';
alert(toString.call(str));
執行結果var str = 'this is string';
alert(toString.apply(str));
執行結果:
這的確是我們想要的結果,大家可以試試其他的型別
4.注意的地方
在IE中使用toString.call()方法時會報錯,建議使用Object.prototype.toString.call()(所有瀏覽器都支援),這是js為原始物件原型提供的toString方法,用法和toString方法一樣。