JavaScript Object.prototype.toString() 方法

Object.prototype.toString() 语法

toString() 是 JavaScript Object 对象实例的一个方法,它用于返回一个对象的字符串表示。

语法:

obj.toString()

说明:

toString() 方法不接收任何参数。

JavaScript 所有内置对象(如 Object、String、Array、Number、Boolean 等)都有 toString() 方法,它们通常会返回该对象的字符串表示(可能略有不同)。例如,数字 666.toString() 会返回 "666"。

对于其他内置对象的 toString() 方法,另请参阅:

此外,小伙伴们还要清楚以下几点。

  • 虽然原始值(如字符串、数字、布尔值)本身不是对象,但当它们被强制转换为对象时(比如通过 String() 或隐式地调用其方法时),会调用其包装对象的 toString() 方法。
  • Object.prototype.toString.call(value) 可以用于判断一个值的精确类型,即使是 nullundefined 也能正确处理。

Object.prototype.toString() 摘要

属于 JavaScript Object 对象
使用频率
官方文档 查看
MDN 查看

Object.prototype.toString() 示例

接下来,我们通过几个简单的例子来讲解一下 toString() 方法是如何使用的。

示例 1:toString() 基本用法

const obj = {};               // Object 对象
const arr = [];               // Array 对象
const fn = function() {};     // Function 对象
const date = new Date();      // Date 对象
const num = 123;              // 原始值,但会调用其包装对象的 toString()
const str = "hello";          // 原始值,但会调用其包装对象的 toString()
const bool = true;            // 原始值,但会调用其包装对象的 toString()

console.log(obj.toString());     // [object Object]
console.log(arr.toString());     // (空字符串,被 Array.prototype.toString() 重写)
console.log(fn.toString());      // 函数的源代码 (被 Function.prototype.toString() 重写)
console.log(date.toString());    // 日期的可读字符串 (被 Date.prototype.toString() 重写)
console.log(num.toString());     // "123" (被 Number.prototype.toString() 重写)
console.log(str.toString());     // "hello" (被 String.prototype.toString() 重写)
console.log(bool.toString());    // "true" (被 Boolean.prototype.toString() 重写)

运行结果如下。

[object Object]
(空字符串)
function() {}
Fri Jan 02 2026 13:03:41 GMT+0800 (中国标准时间)
123
hello
true

分析:

需要注意的是,除了普通的空对象 obj,其他大多数内置类型都重写了 toString()。

示例 2:使用 Object.prototype.toString.call() 判断精确类型

const obj = {};               // Object 对象
const arr = [];               // Array 对象
const fn = function() {};     // Function 对象
const date = new Date();      // Date 对象
const num = 123;              // 原始值,但会调用其包装对象的 toString()
const str = "hello";          // 原始值,但会调用其包装对象的 toString()
const bool = true;            // 原始值,但会调用其包装对象的 toString()

console.log(Object.prototype.toString.call(obj));
console.log(Object.prototype.toString.call(arr));
console.log(Object.prototype.toString.call(fn));
console.log(Object.prototype.toString.call(date));
console.log(Object.prototype.toString.call(num));
console.log(Object.prototype.toString.call(str));
console.log(Object.prototype.toString.call(bool));

运行结果如下。

[object Object]
[object Array]
[object Function]
[object Date]
[object Number]
[object String]
[object Boolean]

分析:

Object.prototype.toString.call() 是一个非常有用的技巧,可以精确判断一个值的具体类型。它通过调用 Object.prototype.toString() 方法并结合 call() 方法来实现精确的类型检查。

示例 3:自定义对象重写 toString() 方法

class Product {
    constructor(name, price) {
        this.name = name;
        this.price = price;
    }

    // 重写 toString() 方法
    toString() {
        return `产品:${this.name}, 价格:${this.price}`;
    }
}

const laptop = new Product("小米 15 Pro", 5008);
const keyboard = new Product("华为 Mate 70", 7298);

console.log(laptop.toString());
console.log(keyboard.toString());

console.log(Object.prototype.toString.call(laptop));

运行结果如下。

产品:小米 15 Pro, 价格:5008
产品:华为 Mate 70, 价格:7298
[object Object]

分析:

我们可以为自己的类或对象实例重写 toString() 方法,以提供更具可读性或更有意义的字符串表示。需要注意的是,即使重写了 toString() 方法,Object.prototype.toString.call() 仍然能返回对象的原始内部类型。

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号