了解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的主要内容,如果未能解决你的问题,请参考以下文章