1. 程式人生 > >js中toString 和 object.toString區別解釋

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 中關於該方法的描述是這樣的:

When the toString method is called, the following steps are taken:If the this value is undefined, return “[object Undefined]“.If the this value is null, return “[object Null]“.Let O be the result of calling ToObject passing the this value as the argument.Let class be the value of the [[Class]] internal property of O.Return the String value that is the result of concatenating the three Strings “[object ", class, and "]“.翻譯如下:

當呼叫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方法一樣。