JavaScript toString() 是 Object 的原型方法(也称实例方法),它定义在 Object.prototype 对象之上,所有 Object 的实例对象都会继承 toString() 方法。
toString() 方法能够返回一个对象的字符串,它返回的字符串比较灵活,可能是一个具体的值,也可能是一个对象的类型标识符。
toString() 的语法格式如下:
返回值:返回一个表示该对象的字符串。
下面代码显示对象实例与对象类型的 toString() 原型方法返回值是不同的。
function F (x, y) { //构造函数
this.x = x;
this.y = y;
}
var f = new F(1, 2); //实例化对象
console.log(F.toString()); //返回函数的源代码
console.log(f.toString()); //返回字符串"[object Object]"
toString() 原型方法返回信息简单,为了能够返回更多有用信息,用户可以重写该方法。例如,针对实例对象返回的字符串都是 "[object Object]",可以对其进行扩展,让对象实例能够返回构造函数的源代码。
Object.prototype.toString = function () {
return this.constructor.toString();
}
调用 f.toString() ,则返回函数的源代码,而不是字符串 "[object Object]"。当然,重写方法不会影响 JavaScript 内置对象的 toString() 返回值,因为它们都是只读的。
console.log(f.toString()); //返回函数的源代码
当把数据转换为字符串时,JavaScript 一般都会调用 toString() 原型方法来实现。由于不同类型的对象在调用该方法时,所转换的字符串都不同,而且都有规律,所以开发人员常用它来判断对象的类型,弥补 typeof 运算符和 constructor 属性在检测对象类型的不足。
当自定义类型时,用户可以重置 toString() 原型方法,自定义对象的数据类型。下面示例为自定义类型 Me 定义一个标识字符串 "[object Me]"。
function Me() {} //自定义数据类型
Me.prototype.toString = function () { //自定义Me数据类型的toString()方法
return "[object Me]";
}
var me = new Me();
console.log(me.toString()); //返回"[object Me]"
console.log(Object.prototype.toString.apply(me)); //默认返回"[object Object]"
Object 还定义了 toLocaleString() 方法,该方法主要作用——留出一个接口,允许不同的对象返回针对本地的字符串表示。在默认情况下,toLocaleString() 方法返回值与 toString() 原型方法返回值完全相同。
目前,主要有 3 个对象自定义了 toLocaleString() 方法。
在 Array 中重写 toString(),让其返回数组元素值的字符串组合;在 Date 中重写 toString(),让其返回当前日期字符串表示;在 Number 中重写 toString(),让其返回数字的字符串表示;在 Date 中重写 toLocaleString(),让其返回当地格式化日期字符串。