js的Symbol

本文最后更新于:2023年12月5日 晚上

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

每个从 Symbol() 返回的 symbol 值都是唯一的。一个 symbol 值能作为对象属性的标识符;这是该数据类型仅有的目的。更进一步的解析见—— glossary entry for Symbol

Symbol([description])

直接使用Symbol()创建新的 symbol 类型,并用一个可选的字符串作为其描述。

  • description:可选

    可选的,字符串类型。对 symbol 的描述,可用于调试但不是访问 symbol 本身。

var sym1 = Symbol();
var sym2 = Symbol('foo');
var sym3 = Symbol('foo');

上面的代码创建了三个新的 symbol 类型。注意,Symbol("foo") 不会强制将字符串“foo”转换成 symbol 类型。它每次都会创建一个新的 symbol 类型:

Symbol("foo") === Symbol("foo");  // false

Symbol 值作为属性名时,该属性是公有属性不是私有属性,可以在类的外部访问。但是不会出现在 for...infor...of 的循环中,也不会被 Object.keys()Object.getOwnPropertyNames() 返回。如果要读取到一个对象的 Symbol 属性,可以通过 Object.getOwnPropertySymbols()Reflect.ownKeys() 取到。


js的Symbol
http://blog.lujinkai.cn/前端/JavaScript/Symbol/
作者
像方便面一样的男子
发布于
2022年12月6日
更新于
2023年12月5日
许可协议