ECMAScript 2020 中 Symbol.toStringTag 方法的用途及使用

简介

ES6(ECMAScript 2015)在语言规范中引入了 Symbol 类型,它的目的是提供一种创建唯一标识符的方法。ES6 之后,每个对象都有一个属性内置的 @@toStringTag 遇到默认情况下是 Object 这一字符串。如有需要,可以利用 Symbol.toStringTag 属性来更改这个默认行为,指定一个对象自定义的 toStringTag。

作用

当我们需要为某些对象定义自己的 toString 方法来标记其所属的类名或类型时,可以使用 Symbol.toStringTag 方法,这种情况下,通过 Object.prototype.toString 方法调用对象的 toString 方法时,即可返回我们自定义的类名或类型。而且不影响类继承。Symbol.toStringTag 重写了 toString tag 方法,让我们可以更好地控制输出的字符串。使得对象在输出时显得更有可读性、可维护性。

使用

为了设计一个符号 toStringTag 属性,我们可以创建一个 Symbol,将 toStringTag 属性设置为该 Symbol 的值。然后再在对象上设置该符号属性即可实现这一目的。例如:

const myTag = Symbol('myTag');

class MyClass {
  get [Symbol.toStringTag]() {
    return myTag;
  }
}

const myInstance = new MyClass();
console.log(Object.prototype.toString.call(myInstance)); // [object myTag]

在代码中,我们声明了一个 myTag 符号,并创建了一个 MyClass 类,为其设置了 get 访问方法,返回了 myTag 符号。最后创建了一个 MyClass 的实例并输出该实例的 toString 方法返回值,可以看到返回了 [object myTag]。这就是利用 Symbol.toStringTag 方法将 MyClass 自定义的类型。

示例

下面这个示例演示了如何重写一个 Set 实例的 toString 方法,将其输出的对象类型修改为自定义类型:"MySet"。

const mySet = new Set([1, 2, 3, 4, 5]);

// 重写 Set 实例的 toStringTag 属性为 "MySet"
mySet[Symbol.toStringTag] = 'MySet';

console.log(mySet.toString());

在这个例子中,我们创建了一个包含 1 到 5 的 Set 实例对象,然后重写它的 toStringTag 属性为 "MySet" 以便输出时更具可读性。

总结

Symbol.toStringTag 方法为开发者提供了一种非常快捷的方式来自定义对象的类型,在打印对象时可以更清晰地查看输出结果。重写了 toStringTag 方法之后可以帮助我们更好地阅读和理解代码,了解对象的类型信息,提高代码的可读性和可维护性。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65ab7a3cadd4f0e0ff5209da