了解Symbol

Posted seven

tags:

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

symbol 是一种基本数据类型 (There are 7 primitive data types: string, number, bigint, boolean, undefined, symbol, and null.)

Symbol()函数会返回symbol类型的值,该类型具有静态属性和静态方法。它的静态属性会暴露几个内建的成员对象;它的静态方法会暴露全局的symbol注册,且类似于内建对象类,但作为构造函数来说它并不完整,因为它不支持语法:"new Symbol()"。

每个从Symbol()返回的symbol值都是唯一的。一个symbol值能作为对象属性的标识符;这是该数据类型仅有的目的。

对 symbol 使用 typeof 运算符

typeof运算符能帮助你识别 symbol 类型

typeof Symbol() === \'symbol\'
typeof Symbol(\'foo\') === \'symbol\'
typeof Symbol.iterator === \'symbol\'

Symbol 类型转换

当使用 symbol 值进行类型转换时需要注意一些事情:

尝试将一个 symbol 值转换为一个 number 值时,会抛出一个 TypeError 错误 (e.g. +sym or sym | 0).
使用宽松相等时, Object(sym) == sym returns true.
这会阻止你从一个 symbol 值隐式地创建一个新的 string 类型的属性名。例如,Symbol("foo") + "bar" 将抛出一个 TypeError (can\'t convert symbol to string).

Symbols 与 for...in 迭代

Symbols 在 for...in 迭代中不可枚举。另外,Object.getOwnPropertyNames() 不会返回 symbol 对象的属性,但是你能使用 Object.getOwnPropertySymbols() 得到它们。

Symbols 与 JSON.stringify()

当使用 JSON.stringify() 时,以 symbol 值作为键的属性会被完全忽略:

JSON.stringify({[Symbol("foo")]: "foo"});
// \'{}\'

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

转载:理解scala中的Symbol

使用javascript的Symbol.asyncIterator来等待循环

了解谷歌 OCR 全文注释中的 DetectedBreak

JavaScript 深入了解基本类型和引用类型的值

ExtJs 组合 selectedValue

js之数据类型(原始类型——数字,字符串,布尔值,空,undefiend,Symbol bigInt)