ECMAScript 2019 中你应该知道的 Symbol 与 Symbol 对象
在 ECMAScript 2019 中, Symbol 成为了一项新的特性,虽然 Symbol 的概念在 ES6 中就已经出现了,但它在 ES2019 中的更新彰显了其重要性。通过了解 Symbol 的使用方法以及 Symbol 对象,你可以更好地理解其在现代 JavaScript 开发中的威力。
Symbol 的定义
Symbol 是 ECMAScript 2015 引入的新的基本数据类型,它与其他基本数据类型不同,表示一个独一无二的值。Symbol 类型的定义及创建方式如下:
-------- ------ ----- -------- - ---------- -------------- ------------------ ---------- -- --------
Symbol 可以被用作属性键,在对象字面量中使用 Symbol 作为键名时,需要使用 [ ] 操作符。Symbol 作为属性键具有唯一性,不会与其他属性冲突。如下所示:
----- -------- - --- ----- -------- - ---------- -------------- ----- ------- - --- ------- ------------------ - -------- -------------------------------- -- --- ------
使用 Symbol 作为属性键时,属性名不可枚举,也就是不能被 for...in 循环获取到。如果需要获取 Symbol 属性,需要使用 Object.getOwnPropertySymbols() 方法。示例代码如下:
----- -------- - --- ----- -------- - ---------- -------------- ----- ------- - --- ------- ------------------ - -------- ---------------------------------------------------- -- ---------- -------------
Symbol.for() 和 Symbol.keyFor()
Symbol.for() 方法和 Symbol.keyFor() 方法的功能比较相似,都是可用于对 Symbol 进行全局注册和检索。
Symbol.for() 方法可以将 Symbol 注册到全局 Symbol 注册表中,如果该 Symbol 已经在注册表中出现过,会直接返回它。示例代码如下:
----- -------- - ----------------------- -------------------- --- ------------------------ -- ----
Symbol.keyFor() 方法用于获取全局 Symbol 注册表中与 Symbol 有关的键名,如果没有找到该 Symbol,则返回 undefined。示例代码如下:
----- -------- - ----------------------- ------------------------------------- -- ----------
Symbol 方法
在 Symbol 对象中,定义了一些方便操作 Symbol 的方法。
Symbol.hasInstance:该方法在检查某个对象是否是类的实例时被调用。
----- ------- - ------ ------------------------------ - ------ -------- ---------- ------ - - -------------- ---------- --------- -- ----
Symbol.isConcatSpreadable:用于确定对象是否可扩展到 array 中。
--- ---- - --- -- --- --- ---- - --- -- --- ------------------------------- -- --- -- -- -- -- -- ------------------------------- - ------ ------------------------------- -- --- -- -- --- -- ---
Symbol.match:用于确定一个输入字符串是否与正则表达式匹配。
----- -------- - ------------------- - ----------- - ------- - --------------------- - ------ ------------------------ - - ------------------ ---------------- -------------------- -- ----
Symbol.toPrimitive:用于转换对象为基本类型值。
----- ------------ - ------------------ - ---------- - ------ - -------------------------- - -- ----- --- --------- - ------ ----------- - ------ ----- - - ----- -------- - --- ----------------- -------------------- - --- -- --
Symbol.toStringTag:用于返回对象的字符串表示。
----- ------- - ----------------------- ------ --- ------ - - ----- -------- - --- ---------- ------------------------------------------------------ -- ------- -- ------
结论
通过了解 Symbol 与 Symbol 对象,我们可以更好地理解其在现代 JavaScript 开发中的重要性。Symbol 可以用作属性键名,保证属性的唯一性,可以通过 Symbol.for() 方法实现 Symbols 的全局注册,并且 Symbol 对象还定义了一些方便操作 Symbol 的方法。希望本文可以为你提供 Symbol 的一些学习及指导意义。
参考链接:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol
https://segmentfault.com/a/1190000023046329
https://juejin.cn/post/6844904114372126733
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/66fa4e68be3b1984ab6c13dd