2013-04-20 26 views
1

當打印數組和對象時,document.write()方法和window.alert()之間有什麼區別?爲什麼document.write()和alert()方法呈現JavaScript對象的方式不同?

不同的行爲顯示此代碼示例中:

var arr = new Array("Maizere","Pathak"); 

document.write(arr); // output: Maizere,Pathak 
alert(arr); // output: maizere,pathak 

爲什麼它們都打印的價值觀?不應該alert()打印Object Object

使用DOM對象,它打印[對象HTML集合],這裏是打印值。

+0

警報(ARR)它工作正常 – 2013-04-20 02:00:59

+0

兩者似乎有相同的結果,看看HTTP: //jsfiddle.net/sachinyadav/NFpRh/ – Sachin 2013-04-20 02:01:03

+0

@Sachin我編輯了我的文章 – 2013-04-20 02:06:55

回答

2

JavaScript中的對象有一個toString方法。只要對象以預期文本的方式使用,就會調用此方法。例如,下面的輸出[object Object]

alert({}); 

陣列有自己的toString方法,做一個完全不同的版本。他們沒有顯示他們的類型,而是顯示他們的內容,並加上逗號。如果你喜歡,可以更換陣列toString方法:

var names = ['Jonathan', 'Sampson']; 

names.toString = function() { 
    return this.length; 
}; 

alert(names); // Outputs 2 

你可以用別的東西的toString實現太多,如果你喜歡:

document.toString.call(names); // [object Array] 

有關更多信息,請參見toString on MSDN

+0

type coersion需要什麼條件/環境? – 2013-04-20 02:08:22

+1

@Maizere在需要文本的地方使用。 – Sampson 2013-04-20 02:13:56

1

alertdocument.write都設置爲與.toString()方法一起使用。對於類型爲object的實例,通常會打印[object Object]。但是,Array類重載了此方法來打印數組的內容。試試arr.toString()來證明是這樣。如果你創建一個對象並給它一個toString方法,它將被調用alert。例如:

var obj = {}; 
obj.toString = function() { return "I'm an Object!"; } 
alert(obj); 

將顯示警告字符串「我是對象!」在裏面。

+0

你能給我一個參考這篇文章 – 2013-04-20 02:12:05

+0

我發現的第一個實際上是http://stackoverflow.com/questions/14340549/why-does-this-javascript-code-using-prototype-work但http:// freewebdesigntutorials.com/javaScriptTutorials/jsArrayObject/toStringMethod.htm也提到了它。 – legacybass 2013-04-20 02:44:11

1

document.write和window.alert方法都使用一個字符串,所以Array.toString方法將用於從數組中產生一個字符串值。

toString方法從不同類型的對象中產生的東西可能因瀏覽器而異,但是您將從document.write和window.alert獲得相同的結果,因爲它們使用相同的方法來生成字符串。

1

爲了延長喬納森·桑普森的答案,並給一點心靈破碎機...

var names = ['Jonathan', 'Sampson']; 
names.toString = function() {return 0;}; 
names.valueOf = function() {return 1;}; 

console.log(names + ""); // 1 or 0 ? What do you think. 
console.log(names.toString()); // 1 or 0 ? What do you think.¨ 
alert(names); 

See demo

相關問題