JavaScript 中的符号与对象

💡 原文英文,约400词,阅读约需2分钟。
📝

内容提要

Symbol 是 JavaScript 的一种数据类型,用于创建唯一且隐藏的对象键。分为本地符号和全局符号。本地符号不在全局注册表中,即使描述相同也唯一;全局符号通过 `Symbol.for` 创建,存储在全局注册表中,描述相同则相等。符号不能转换为字符串,不能通过 `for...in` 或 `Object.keys()` 访问,但可用 `Object.getOwnPropertySymbols()` 查看。`Symbol.keyFor()` 可获取全局符号的描述。

🎯

关键要点

  • Symbol 是 JavaScript 的一种数据类型,用于创建唯一且隐藏的对象键。

  • 符号分为本地符号和全局符号。

  • 本地符号不在全局注册表中,即使描述相同也唯一。

  • 全局符号通过 Symbol.for 创建,存储在全局注册表中,描述相同则相等。

  • 符号不能转换为字符串,不能通过 for...in 或 Object.keys() 访问。

  • 可以使用 Object.getOwnPropertySymbols() 查看对象的所有符号。

  • 使用 Symbol.keyFor() 可以获取全局符号的描述。

  • 本地符号的描述相同但值不同,验证示例显示 key_one 和 key_two 不相等。

  • 全局符号的描述相同且值相等,验证示例显示 key_one 和 key_two 相等。

  • 对象中的每个键都被转换为字符串,即使是数字。

延伸问答

JavaScript 中的符号是什么?

符号是 JavaScript 的一种数据类型,用于创建唯一且隐藏的对象键。

本地符号和全局符号有什么区别?

本地符号不在全局注册表中,即使描述相同也唯一;全局符号通过 Symbol.for 创建,存储在全局注册表中,描述相同则相等。

如何查看对象中的所有符号?

可以使用 Object.getOwnPropertySymbols() 函数查看对象的所有符号。

符号能否转换为字符串?

符号不能转换为字符串。

如何获取全局符号的描述?

使用 Symbol.keyFor(symbol) 可以获取全局符号的描述。

为什么两个本地符号即使描述相同也不相等?

因为每个本地符号都是唯一的,即使描述相同,它们的值也不同。

➡️

继续阅读