红宝书,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、上面的结果,到底是因为对象自定义的两个方法得来的,还是直接通过调用得来的?可以简单的告诉我一下这个过程是什么样的么?
alert(people) === alert(people.toString())
alert里面的参数期望的是一个字符串,所以会自动调用toString方法
而toString和toLocalString的区别就像是两个函数区别,之间没有任何联系
关于数组为何其toString和toLocalString和普通对象不同,主要是数组重写了这两个方法