我被javascript红宝书5.2.2转换方法里的一段例子卡住了
红宝书,5.2.2 转换方法
toLocaleString()
方法经常也会返回与toString()
和valueOf()
方法相同的值,但也不总是如此。当调用数组的toLocaleString()
方法时,它也会创建一个数组值的以逗号分隔的字符串。而与前两个方法唯一的不同之处在于,这一次为了取得每一项的值,调用的是每一项的toLocaleString()
方法,而不是toString()
方法,请看下面这个例子:
大神们,我就直接上代码了:
var person1 = {
toLocaleString : function () {
return "Nikolaos";
},
toString : function() {
return "Nicholas";
}
};
var person2 = {
toLocaleString : function () {
return "Grigorios";
},
toString : function() {
return "Greg";
}
};
var people = [person1, person2];
alert(people); //Nicholas,Greg
alert(people.toString()); //Nicholas,Greg
alert(people.toLocaleString()); //Nikolaos,Grigorios
其实对这一章的陈述和代码,表示很多地方弄不清楚:
1、alert(people)
为什么将people这个数组传递给alert( ),输出的结果是Nicholas
和Greg
?
2、person1
和person2
这两个对象,它们分别定义了toString()
和toLocaleString( )
方法,这两个方法返回不同的值。但这两个对象里自定义的方法和后来调用的alert(people.toString())
和alert(people.toLocaleString())
不冲突么?
alert(people.toString()); //Nicholas,Greg
alert(people.toLocaleString()); //Nikolaos,Grigorios
3、上面的结果,到底是因为对象自定义的两个方法得来的,还是直接通过调用得来的?可以简单的告诉我一下这个过程是什么样的么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
alert(people) === alert(people.toString())
alert里面的参数期望的是一个字符串,所以会自动调用toString方法
而toString和toLocalString的区别就像是两个函数区别,之间没有任何联系
关于数组为何其toString和toLocalString和普通对象不同,主要是数组重写了这两个方法
讨论一下第3个问题:
先来看一下你在提问开头关于红宝书内容的引用:
也就是说
valueOf
再调用toString
。doSomething
,才会查找原型链上是否有这个属性,直到查到Object
的原型链中还没有则返回undefined
。其他(这才是我想说的)
toLocaleString
一般不会返回和valueOf
相同的值,类型就不一样。toLocalString
的设计目的是返回一个特定语言环境的字符串
,因此Array
中会对每个子对象做toLocalString
处理。说实话 我也没看懂这个例子 搜索过来的,我觉得楼上的回答还是很牵强,有没有可以详细解释一哈的