区分javascript中的toString(),toLocaleString(),valueOf()方法

首先我们随意创建一个对象,这很简单,打开FF浏览器的Firebug切换到控制台或者打开webkit浏览器的审查元素功能.

输入以下内容:

var obj1=[1,2,3,4,5]
var obj2=[5,4,3,2,1]
var obj3=[obj1,obj2]
接着试试调用obj3的toString(),toLocaleString(),valueOf()方法:

obj3.toString();
1,2,3,4,5,5,4,3,2,1
obj3.toLocaleString();
1,2,3,4,5,5,4,3,2,1
obj3.valueOf();
[

Array[5]
1. 01
2. 12
3. 23
4. 34
5. 45
6. length5
7. protoArray[0]

,

Array[5]
1. 05
2. 14
3. 23
4. 32
5. 41
6. length5
7. protoArray[0]

]

根据输出结果可以发现toString()和toLocaleString()方法输出的内容是一样的,且都为字符串形式.而valueOf输出的是这个对象本身的值.

仔细想想,开发javascript的人绝对不会无聊到去创造两个一样的方法吧.

我们稍微修改一下obj1和obj2,再来一次:

obj1.toString=”I am obj1.”
I am obj1.
obj2.toString=”I am obj2″
I am obj2
obj3.toString()
TypeError: Cannot convert object to primitive value
1. argumentsArray[0]
2. get messagefunction getter() { [native code] }
3. get stackfunction getter() { [native code] }
4. set messagefunction setter() { [native code] }
5. set stackfunction setter() { [native code] }
6. type“cannotconvertto_primitive”
7. protoError

 

obj3
[ 

Array[5]
1. 01
2. 12
3. 23
4. 34
5. 45
6. length5
7. toString“I am obj1.”
8. protoArray[0]

,

Array[5]
1. 05
2. 14
3. 23
4. 32
5. 41
6. length5
7. toString“I am obj2″
8. protoArray[0]

]

obj3.toLocaleString()
1,2,3,4,5,5,4,3,2,1
发现了什么?toLocaleString()与toString所访问的内容不太相同:toLocaleString访问的是obj3中每个元素的toLocaleString()方法,toString访问的是obj3中每个元素的toString()方法.

那么为什么toString()和toLocaleSting()是分开的?很简单,从方法命名上可以知道,toString()方法获取的是String(传统字符串),而toLocaleString()方法获取的是LocaleString(本地环境字符串).

如果你开发的脚本在世界范围都有人使用,那么将对象转换成字符串时请使用toString()方法来完成.

因为LocaleString()会根据你机器的本地环境来返回字符串,它和toString()返回的值在不同的本地环境下使用的符号会有微妙的变化.

所以使用toString()是保险的,返回唯一值的方法,它不会因为本地环境的改变而发生变化.

如果是为了返回时间类型的数据,推荐使用LocaleString().若是在后台处理字符串,请务必使用toString().