区分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. 0: 1 2. 1: 2 3. 2: 3 4. 3: 4 5. 4: 5 6. length: 5 7. proto: Array[0]
,
Array[5]
1. 0: 5 2. 1: 4 3. 2: 3 4. 3: 2 5. 4: 1 6. length: 5 7. proto: Array[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. arguments: Array[0] 2. get message: function getter() { [native code] } 3. get stack: function getter() { [native code] } 4. set message: function setter() { [native code] } 5. set stack: function setter() { [native code] } 6. type: “cannot_convert_to_primitive” 7. proto: Error

obj3
[

Array[5]
1. 0: 1

  1. 1: 2
  2. 2: 3
  3. 3: 4
  4. 4: 5
  5. length: 5
  6. toString: “I am obj1.”
  7. proto: Array[0]

,

Array[5]
1. 0: 5

  1. 1: 4
  2. 2: 3
  3. 3: 2
  4. 4: 1
  5. length: 5
  6. toString: “I am obj2″
  7. proto: Array[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().