ES10 中的 toStringTag 属性:如何判断一个对象是什么类型?

阅读时长 4 分钟读完

在 JavaScript 中,对象是一种非常重要的数据类型,我们经常需要判断一个对象的类型以便于进行相应的操作。在 ES10 中,新增了一个 toStringTag 属性,可以让我们更方便地判断对象的类型。

toStringTag 属性是什么?

toStringTag 属性是一个内置的 Symbol 值,它是所有对象的一个属性,用来描述对象的类型。它的默认值是 undefined,但是可以被子类继承并覆盖。当我们使用 Object.prototype.toString() 方法时,它会返回一个字符串,其中包含了 toStringTag 属性的值。

如何使用 toStringTag 属性?

我们可以通过在对象的原型链上定义 toStringTag 属性来指定对象的类型。例如,我们可以定义一个 Animal 类,并在它的原型对象上定义 toStringTag 属性:

这样,当我们调用 Object.prototype.toString() 方法时,它会返回 '[object Animal]',从而表示这个对象是一个 Animal 类型的对象。

我们也可以通过继承内置对象的方式来使用 toStringTag 属性。例如,我们可以继承 Array 类,并在它的原型对象上定义 toStringTag 属性:

这样,当我们调用 Object.prototype.toString() 方法时,它会返回 '[object MyArray]',从而表示这个对象是一个 MyArray 类型的对象。

toStringTag 属性的指导意义

使用 toStringTag 属性可以让我们更方便地判断对象的类型。在之前,我们通常使用 instanceof 运算符或者 typeof 运算符来判断对象的类型,但是它们存在一些缺陷。例如,instanceof 运算符不能很好地处理继承关系,而 typeof 运算符则不能区分数组和对象等不同类型的对象。

使用 toStringTag 属性可以避免上述问题,因为它可以精确地描述对象的类型。另外,由于 toStringTag 属性是内置的 Symbol 值,因此它不会被污染,也不会与其他属性名冲突。

示例代码

下面是一个使用 toStringTag 属性的示例代码,它定义了一个 Shape 类,以及两个继承自 Shape 类的子类:

-- -------------------- ---- -------
----- ----- -
  --- ---------------------- -
    ------ --------
  -
-

----- --------- ------- ----- -
  --- ---------------------- -
    ------ ------------
  -
-

----- ------ ------- ----- -
  --- ---------------------- -
    ------ ---------
  -
-

----- ----- - --- --------
----- --------- - --- ------------
----- ------ - --- ---------

--------------------------------------------------- -- ------- ------
------------------------------------------------------- -- ------- ----------
---------------------------------------------------- -- ------- -------

在这个示例代码中,我们定义了一个 Shape 类,并在它的原型对象上定义了 toStringTag 属性。然后,我们定义了两个继承自 Shape 类的子类 Rectangle 和 Circle,它们分别在自己的原型对象上定义了 toStringTag 属性。

最后,我们创建了一个 Shape 类型的对象 shape,以及一个 Rectangle 类型的对象 rectangle 和一个 Circle 类型的对象 circle,并使用 Object.prototype.toString() 方法来获取它们的类型。我们可以看到,通过使用 toStringTag 属性,我们可以很方便地判断这些对象的类型。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d3d56aa941bf713473f03e

纠错
反馈