`toString()` 方法返回一个表示该对象的字符串。

## 语法

    object.toString()

### 返回值

表示该对象的字符串。

## 描述

每个对象都有一个`toString()`方法，当该对象被表示为一个文本值时，或者一个对象以预期的字符串方式引用时自动调用。默认情况下，`toString()`方法被每个`Object`对象继承。如果此方法在自定义对象中未被覆盖，`toString()` 返回 "[object type]"，其中`type`是对象的类型。以下代码说明了这一点：

    var o = new Object();
    o.toString(); // returns [object Object]

注意：从JavaScript1.8.5开始`toString()`调用 `null`返回`[object Null]`，`undefined` 返回`[object Undefined]`，如第5版的ECMAScript和随后的Errata。请参阅使用`toString()`检测对象类型。

## 示例

### 覆盖默认的`toString`方法

可以自定义一个方法来取代默认的 `toString()` 方法。该 `toString()` 方法不能传入参数并且必须返回一个字符串。自定义的 `toString()` 方法可以是任何我们需要的值，但如果它附带有关对象的信息，它将变的非常有用。

以下代码定义了`Dog`对象类型，并创建了一个`Dog`类型的 `theDog` 对象：

    function Dog(name,breed,color,sex) {
       this.name=name;
       this.breed=breed;
       this.color=color;
       this.sex=sex;
    }

    var theDog = new Dog("Gabby","Lab","chocolate","female");

如果当前的对象调用了 `toString()` 方法，它将会返回从 `Object`继承下来的 `toString()`方法的返回默认值：

    theDog.toString(); // returns [object Object]

下面的代码中定义了一个叫做 `dogToString()` 的方法来覆盖默认的 `toString()` 方法。这个方法生成一个 "`property = value;`" 形式的字符串，该字符串包含了当前对象的 name， breed，color 和 sex 的值。

    Dog.prototype.toString = function dogToString() {
      var ret = "Dog " + this.name + " is a " + this.sex + " " + this.color + " " + this.breed;
      return ret;
    }

使用上述代码，任何时候在字符串上下文中使用`theDog.toString()`，JavaScript 都会自动调用 `dogToString()` 方法（`dogToString()`可以是一个匿名函数），并且返回以下字符串：

    "Dog Gabby is a female chocolate Lab"

### 使用`toString()`检测对象类型

可以通过`toString()` 来获取每个对象的类型。为了每个对象都能通过 `Object.prototype.toString()` 来检测，需要以 `Function.prototype.call()` 或者 `Function.prototype.apply()` 的形式来调用，传递要检查的对象作为第一个参数，称为`thisArg`。

    var toString = Object.prototype.toString;

    toString.call(new Date); // [object Date]
    toString.call(new String); // [object String]
    toString.call(Math); // [object Math]

    //Since JavaScript 1.8.5
    toString.call(undefined); // [object Undefined]
    toString.call(null); // [object Null]

## 规范

Specification | Status | Comment
--- | --- | ---
ECMAScript 1st Edition (ECMA-262) | Standard | Initial definition. Implemented in JavaScript 1.0.
ECMAScript 5.1 (ECMA-262) Object.prototype.toString | Standard | Call on `null` returns `[object Null]`, and `undefined` returns `[object Undefined]`
ECMAScript 2015 (6th Edition, ECMA-262) Object.prototype.toString | Standard |
ECMAScript Latest Draft (ECMA-262) Object.prototype.toString | Draft |

## 浏览器兼容

The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.

Update compatibility data on GitHub

| Desktop | Mobile | Server
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | Safari on iOS | Samsung Internet | Node.js
`toString` | Chrome Full support Yes | Edge Full support 12 | Firefox Full support 1 | IE Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Edge Mobile Full support Yes | Firefox Android Full support 4 | Opera Android Full support Yes | Safari iOS Full support Yes | Samsung Internet Android Full support Yes | nodejs Full support Yes

### Legend

Full support
  Full support

## 相关链接

- `Object.prototype.toSource()`
- `Object.prototype.valueOf()`
- `Number.prototype.toString()`