打印数组和对象时,document.write()
方法和window.alert()
之间有什么区别?
此代码示例中显示了不同的行为:
var arr = new Array("Maizere","Pathak");
document.write(arr); // output: Maizere,Pathak
alert(arr); // output: maizere,pathak
为什么他们都打印价值?不应该alert()
打印Object Object
?
使用DOM对象,它会打印[对象HTML集合],这里是打印值。
答案 0 :(得分: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。
答案 1 :(得分:1)
alert
和document.write
都设置为使用.toString()
方法。对于object
类型的实例,通常会打印[object Object]
。但是,Array类重载了此方法以打印数组的内容。尝试执行arr.toString()
来证明这种情况。如果您创建一个对象并为其提供toString方法,则会调用它来进行提醒。例如:
var obj = {};
obj.toString = function() { return "I'm an Object!"; }
alert(obj);
将显示一个警告,其中包含字符串"我是一个对象!"在它。
答案 2 :(得分:1)
document.write和window.alert方法都使用字符串,因此Array.toString方法将用于从数组中生成字符串值。
toString方法从不同类型的对象产生的内容可能因浏览器而异,但是您将从document.write和window.alert获得相同的结果,因为它们使用相同的方法来生成字符串。
答案 3 :(得分:1)
延长Jonathan Sampson的答案并给予一点思想破碎......
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 );