在 ECMAScript 2015 规范中,Symbol是一种新增的基本数据类型,它并不是字面量,而是一种独特的原始数据类型,用以表示代码中的唯一标识符。在 ECMAScript 2018 版本中,Symbol被进一步深化和完善,增加了一些新的特性和用法。
Symbol 的基本特性
在使用 Symbol 前需要进行声明,在声明时可以传入一个可选的字符串参数,用于描述该 Symbol 在代码中的具体含义,但该字符串并不影响 Symbol 的唯一性。
--- ------- - --------- --- ------- - ------------------
Symbol 值可以作为对象的属性名使用,这样就能通过属性名获取到对应的值,这种方式可以避免属性名冲突的问题。
--- ------- - ------------------ --- --- - --- ------------ - -------- -------------------------- -- -------
需要注意的是,使用 Symbol 值作为属性名时,只能通过方括号运算符获取值,不能用点运算符获取值。
--- ------- - ------------------ --- --- - --- ------------ - -------- ------------------------- -- --------- -------------------------- -- -------
Symbol 的新特性
标准内置 Symbol
ECMAScript 2018 在内置 Symbol 属性上增加了新的特性,使得开发者能够更好地控制其对象的行为。
Symbol.iterator
该属性定义了一个返回对象迭代器的默认方法,用于对应对象进行迭代操作。该方法在使用 for...of 循环时被自动调用,也可以手动调用该方法。
--- ---- - --- -- --- --- -------- - ------------------------ ----------------------------------- -- - ----------------------------------- -- - ----------------------------------- -- -
Symbol.toStringTag
该属性定义了一个 toString 方法的标签,用于描述该对象的字符串表示形式。通过该属性,开发者可以自定义对象在进行 toString 操作时输出的结果。
----- ------- ---------------------- - ------ --------- - - --- ------ - --- --------- ------------------------------- -- ------- -------
Symbol.hasInstance
该属性表示一个构造函数是否可以被某个对象识别为其原型属性,一般用来实现自定义 instanceof 操作符。
----- --------- - ------ ------------------------------ - ------ -------------- -- ---------------- - - --- ---- - - ------ --- ------- -- -- ---------------- ---------- ----------- -- ----
Symbol.asyncIterator
该属性定义了一个返回对象异步迭代器的默认方法。与 Symbol.iterator 类似,该方法在使用 for await...of 循环时被自动调用,也可以手动调用该方法。
其他用法
Symbol.for
该方法用于在全局 Symbol 注册表中搜索一个名为 key 的 Symbol,如果找到该 Symbol 则返回,否则会新建一个 Symbol 并保存到注册表中。
--- ------- - ---------------------- --- ------- - ---------------------- -- ------ --- ------------------- --- --------- -- ----
Symbol.keyFor
该方法用于获取一个 Symbol 在全局注册表中的 key,如果该 Symbol 不在注册表中则返回 undefined。
--- ------- - ---------------------- --- --- - ----------------------- ----------------- -- ---------
总结
Symbol 作为一种新的基本数据类型,拥有独特的特性和用法。在 ECMAScript 2018 中,Symbol被进一步深化和完善,增加了一些新的特性和用法。通过灵活使用 Symbol,开发者可以更好地控制其对象的行为,从而提高代码的易读性和灵活性。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64f83c74f6b2d6eab305d6ed