我被javascript红宝书5.2.2转换方法里的一段例子卡住了

发布于 2022-09-07 04:02:18 字数 1474 浏览 21 评论 0

红宝书,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( ),输出的结果是NicholasGreg?
2、person1person2这两个对象,它们分别定义了toString()toLocaleString( )方法,这两个方法返回不同的值。但这两个对象里自定义的方法和后来调用的alert(people.toString())alert(people.toLocaleString())不冲突么?

alert(people.toString());             //Nicholas,Greg
alert(people.toLocaleString());       //Nikolaos,Grigorios

3、上面的结果,到底是因为对象自定义的两个方法得来的,还是直接通过调用得来的?可以简单的告诉我一下这个过程是什么样的么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

逆光飞翔i 2022-09-14 04:02:18

alert(people) === alert(people.toString())
alert里面的参数期望的是一个字符串,所以会自动调用toString方法
而toString和toLocalString的区别就像是两个函数区别,之间没有任何联系
关于数组为何其toString和toLocalString和普通对象不同,主要是数组重写了这两个方法

诗笺 2022-09-14 04:02:18

讨论一下第3个问题:
先来看一下你在提问开头关于红宝书内容的引用:

...而与前两个方法唯一的不同之处在于,这一次为了取得每一项的值,调用的是每一项toLocaleString()方法...

也就是说

people.toLocaleString();
//等价于
people.forEach(item=>item.toLocaleString());
  1. 隐式强制类型转换,会先调用valueOf再调用toString
  2. 没有所谓的冲突,属性访问时,如果对象在本身查找不到一个属性doSomething,才会查找原型链上是否有这个属性,直到查到Object的原型链中还没有则返回undefined
  3. 同2

其他(这才是我想说的)

toLocaleString()方法经常也会返回与toString()和valueOf()方法相同的值

  1. toLocaleString一般不会返回和valueOf相同的值,类型就不一样。
  2. toLocalString的设计目的是返回一个特定语言环境的字符串,因此Array中会对每个子对象做toLocalString处理。
秋叶绚丽 2022-09-14 04:02:18

说实话 我也没看懂这个例子 搜索过来的,我觉得楼上的回答还是很牵强,有没有可以详细解释一哈的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文