来自 《JavaScript高级程序设计(第三版)》
1.转换方法
众所周知,所有对象都具有toLocaleString(),toString()与valueOf()方法。其中,调用数组的toString()方法会返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串。而调用valueOf()返回的还是数组。实际上,为了创建这个字符串会调用数组每一项的toString()方法。请看下面这个例子。
1 var colors= ["red","blue","green"]; 2 alert(colors.toString()); // red,blue,green 3 alert(colors.valueOf()); // red,blue,green 4 alert(colors); // red,blue,green
在这里,我们首先显式地调用了toString()方法,以便返回数组的字符串表示,每个值的字符串表示拼接成了一个字符串,中间以逗号分隔。接着调用valueOf()方法,而最后一行代码直接将数组传递给了alert()。由于alert()要接收字符串参数,所以它会在后台调用toString()方法,由此会得到与直接调用toString()方法相同的结果。
另外,toLocaleString()方法经常也会返回与toString()和valueOf()方法相同的值,但也不总是如此。请看下面这个例子。
var person1 = {
toLocaleString : function () {
return "Tom";
},
toString : function() {
return "Tom";
}
};
var person2 = { toLocaleString : function () { return "Jerry1"; }, toString : function() { return "Jerry2"; } }; var person = [person1, person2]; alert(person); //Tom,Jerry2 alert(person.toString()); //Tom,Jerry2 alert(person.toLocaleString()); //Tom,Jerry1
数组继承的toLocaleString(),toString()和valueOf()方法,在默认情况下都会以逗号分隔开的字符串形式返回数组项。而如果使用join()方法,则可以使用不同的分隔符来构建这个字符串。join()方法只接收一个参数,即用作分隔符的字符串,然后返回包含所有数组项的字符串。请看下面的例子。
var colors = ["red","green","blue"]; alert(colors.join(",")); //red,green,blue alert(colors.join("||")); //red||green||blue
(如果数组中的某一项的值是null或undefined,那么该值在join()、toLocaleString()、toString()和value()方法返回的结果中以空字符串表示。)
toString()方法与toLocaleString()方法区别:
- toLocalString()是调用每个数组元素的 toLocaleString() 方法,然后使用地区特定的分隔符把生成的字符串连接起来,形成一个字符串。
- toString()方法获取的是String(传统字符串),而toLocaleString()方法获取的是LocaleString(本地环境字符串)。
- 如果你开发的脚本在世界范围都有人使用,那么将对象转换成字符串时请使用toString()方法来完成。
- LocaleString()会根据你机器的本地环境来返回字符串,它和toString()返回的值在不同的本地环境下使用的符号会有微妙的变化。所以使用toString()是保险的,返回唯一值的方法,它不会因为本地环境的改变而发生变化。如果是为了返回时间类型的数据,推荐使用LocaleString()。若是在后台处理字符串,请务必使用toString()