为什么document.write()和alert()方法呈现JavaScript对象的方式不同?
Why do the document.write() and alert() methds render JavaScript objects differently?
在打印数组和对象时,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集合],这里它打印值
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]
有关其他信息,请参阅MSDN上的toString
。
alert
和document.write
都设置为使用.toString()
方法。对于类型object
的实例,这通常打印[object Object]
。但是,Array类重载了此方法以打印数组的内容。尝试做arr.toString()
来显示这种情况。如果你创建一个对象并给它一个toString方法,它将被alert调用。例如:
var obj = {};
obj.toString = function() { return "I'm an Object!"; }
alert(obj);
将显示一个带有字符串"I'm an Object!"的警告。
写和窗口。alert方法使用字符串,所以Array。toString方法将用于从数组中生成字符串值。
toString方法从不同类型的对象产生的结果可能因浏览器而异,但您将从document得到相同的结果。写和窗口。
延续乔纳森·桑普森的回答,并给一点头脑粉碎…
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 );
看到演示
相关文章:
- 面向对象JavaScript中的私有函数
- 对象 Javascript 中的标签无效 - 想要添加事件列表器
- 将字符串转换为对象 javascript/jquery
- 正在检查对象javascript中是否存在嵌套属性
- 时间-日期对象JavaScript getUTCMilliseconds
- 仅在对象(javascript)中解析值
- 使用对象(JavaScript或jQuery)填充选择下拉列表
- 引用另一个对象javascript中的对象
- 如何删除列表中的对象?Javascript nodejs和下划线
- 无法从日期对象javascript获取日期和月份
- 如何在if语句中使用对象-Javascript
- 对象javascript错误
- 对象Javascript的少数实例
- 位置对象Javascript
- 将字符串传递到对象javascript中
- 获取对象Javascript或jQuery的最后一个值
- 鼠标接近对象Javascript
- 这个mixins代码是书中的错误吗;面向对象JavaScript的原理”;
- 使用闭包编译器编写更好的面向对象JavaScript完整示例代码
- 访问对象javascript数组中的对象属性值