理解 Symbol.toStringTag 用法

Posted 前端精髓

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解 Symbol.toStringTag 用法相关的知识,希望对你有一定的参考价值。

对象的Symbol.toStringTag属性,指向一个方法。在该对象上面调用Object.prototype.toString方法时,如果这个属性存在,它的返回值会出现在toString方法返回的字符串之中,表示对象的类型。也就是说,这个属性可以用来定制[object Object]或[object Array]中object后面的那个字符串。

// 例一
([Symbol.toStringTag]: 'Foo'.toString())
// "[object Foo]"

// 例二
class Collection 
  get [Symbol.toStringTag]() 
    return 'xxx';
  

let x = new Collection();
Object.prototype.toString.call(x) // "[object xxx]"

ES6 新增内置对象的Symbol.toStringTag属性值如下。

1、JSON[Symbol.toStringTag]:‘JSON’
2、Math[Symbol.toStringTag]:‘Math’
3、Module 对象M[Symbol.toStringTag]:‘Module’
4、ArrayBuffer.prototype[Symbol.toStringTag]:‘ArrayBuffer’
5、DataView.prototype[Symbol.toStringTag]:‘DataView’
6、Map.prototype[Symbol.toStringTag]:‘Map’
7、Promise.prototype[Symbol.toStringTag]:‘Promise’
8、Set.prototype[Symbol.toStringTag]:‘Set’
9、%TypedArray%.prototype[Symbol.toStringTag]:'Uint8Array’等
10、WeakMap.prototype[Symbol.toStringTag]:‘WeakMap’
11、WeakSet.prototype[Symbol.toStringTag]:‘WeakSet’
12、%MapIteratorPrototype%[Symbol.toStringTag]:‘Map Iterator’
13、%SetIteratorPrototype%[Symbol.toStringTag]:‘Set Iterator’
14、%StringIteratorPrototype%[Symbol.toStringTag]:‘String Iterator’
15、Symbol.prototype[Symbol.toStringTag]:‘Symbol’
16、Generator.prototype[Symbol.toStringTag]:‘Generator’
17、GeneratorFunction.prototype[Symbol.toStringTag]:‘GeneratorFunction’

webpack 用这个标识对象为 ESmodule 模块对象。所以经常 webpack 打包的代码里面看到如下结构:

以上是关于理解 Symbol.toStringTag 用法的主要内容,如果未能解决你的问题,请参考以下文章

深入理解jvm--分代回收算法通俗理解

《深入理解java虚拟机》笔记JVM调优(分代垃圾收集器)

深入理解V8的垃圾回收原理

理解JVM之内存分配以及分代思想实现

深入理解JVM - 分代的基本概念

深入理解Java虚拟机——分代收集(Generational-Collection)算法