使用js toString()方法转换的对象会给出奇数结果吗?

时间:2014-12-25 17:29:34

标签: javascript oop

以下显示的代码使用toString()方法对数据类型进行少量转换的结果。 所有其他数据类型都可以使用toString()方法转换为字符串,但是当尝试使用toString()方法将对象转换为字符串时,它会给出奇怪的结果,它是" [object Object]"

var b =1
b.toString();// produce "1"


var x=function(){var y=1;};
x.toString();// produce "function (){var y=1;}"


var z = [1,2];
z.toString();// produce "1,2"

var a = new Date;
//a = Date {Thu Dec 25 2014 22:44:32 GMT+0530 (Sri Lanka Standard Time)}
a.toString();// produce "Thu Dec 25 2014 22:44:32 GMT+0530 (Sri Lanka Standard Time)"



var obj = { name: 'John' }
obj.toString();// produce "[object Object]"

我想知道当我们尝试使用toString()方法将对象转换为字符串时,为什么它会产生奇怪的结果。

而不是给出" [object Object]"为什么不会toString()方法返回此值" {name:' John' }"

2 个答案:

答案 0 :(得分:1)

在Javascript中,所有对象都从Object继承。对于自定义对象,如果未定义toString()方法,它将从其父类继承它。所以obj.toString()打印“[object Object]”,因为它是Object类型的对象(基本类型)。

答案 1 :(得分:0)

Javascript有几个内置对象,

例如:

  • JavaScript编号对象
  • JavaScript布尔对象
  • JavaScript String Object
  • JavaScript数组对象
  • JavaScript日期对象
  • JavaScript Math Object
  • JavaScript RegExp对象

每个对象都以不同的方式实现toString方法。


对于用户定义的对象,默认的toString方法返回[object Object]。你可以根据需要覆盖它..



function Car(type){
    this.type = type;
}

Car.prototype.toString = function(){
    return this.type + " car";
}

var car = new Car('bmw');
alert(car.toString());// produce "bmw car"




你甚至可以重写Object.prototype.toString方法(但可能不是一个好主意)。



Object.prototype.toString = function() {
   return JSON.stringify(this);    ;
}

var obj = { name: 'John' }
alert(obj.toString());// produce "{ "name": "John"}"