ES6 - Symbol
Symbol 简介
ES6 引入了一种名为 Symbol 的新原始类型。它们有助于在 JavaScript 程序中实现元编程。
语法
const mySymbol = Symbol() const mySymbol = Symbol(stringDescription)
Symbol 只是一块内存,您可以在其中存储一些数据。每个符号将指向不同的内存位置。Symbol() 构造函数返回的值是唯一且不可变的。
示例
让我们通过一个例子来理解这一点。最初,我们创建了两个没有描述的符号,然后创建了具有相同描述的符号。在这两种情况下,比较符号时相等运算符都会返回 false。
<script> const s1 = Symbol(); const s2 = Symbol(); console.log(typeof s1) console.log(s1===s2) const s3 = Symbol("hello");//description const s4 = Symbol("hello"); console.log(s3) console.log(s4) console.log(s3==s4) </script>
上述代码的输出将如下所示 −
symbol false Symbol(hello) Symbol(hello) false
Sr.No | 属性和说明 |
---|---|
1 | Symbol.for(key)
使用给定的键在符号注册表中搜索现有符号,如果找到则返回。否则,将使用此键在全局符号注册表中创建一个新符号。 |
2 | Symbol.keyFor(sym)
从全局符号注册表中检索给定符号的共享符号键。 |
符号和类
符号可以与类一起使用来定义类中的属性。优点是,如果属性是如下所示的符号,则只有知道符号名称才能在包外部访问该属性。因此,当符号用作属性时,数据被封装得更好。
Example
<script> const COLOR = Symbol() const MODEL = Symbol() const MAKE = Symbol() class Bike { constructor(color ,make,model){ this[COLOR] = color; this[MAKE] = make; this[MODEL] = model; } } let bike = new Bike('red','honda','cbr') console.log(bike) //仅当知道符号名称时才可以访问属性 console.log(bike[COLOR]) </script> 上述代码的输出将如下所示 −Bike {Symbol(): "red", Symbol(): "honda", Symbol(): "cbr"} red