Das
es6-Symbol ist ein Grundtyp. Symbol ist ein neuer grundlegender Datentyp, der in es6 eingeführt wurde und einen eindeutigen Wert darstellt. Seine Funktion besteht darin, Konflikte mit Attributnamen zu verhindern und sicherzustellen, dass jeder Attributname im Objekt eindeutig ist.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, ECMAScript Version 6, Dell G3-Computer.
Symbol
ist ein grundlegender Datentyp, ein neuer Datentyp, der in ES6 eingeführt wurde. Symbol
是一种基本数据类型,一种在ES6引入的新的数据类型。
目的是为了防止属性名的冲突,保证对象中每一个属性名都是独一无二的。
let s1 = Symbol('foo'); let s2 = Symbol('foo'); s1 === s2 // false
Symbol类型可以有一个字符串参数,表示对Symbol实例的描述。所以相同描述的两个Symbol类型实例也是不相等的。
let s = Symbol(); // 第一种写法 let a = {}; a[mySymbol] = 'Hello!'; // 第二种写法 let a = { [mySymbol]: 'Hello!' }; // 第三种写法 let a = {}; Object.defineProperty(a, mySymbol, { value: 'Hello!' }); // 以上写法都得到同样结果 a[mySymbol] // "Hello!"
可以看出使用Symbol类型当属性名,必须使用[]
才可以。如果不使用则表示与变量名相同字符串当属性名的属性。
Symbol作为属性名,遍历对象的时候,该属性不会出现在
for...in
、for...of
循环中,也不会被Object.keys()
、Object.getOwnPropertyNames()
、JSON.stringify()
返回
但是,它也不是私有属性,有一个
Object.getOwnPropertySymbols()
方法,可以获取指定对象的所有Symbol属性名。该方法返回一个数组,成员是当前对象的所有用作属性名的Symbol值。
Symbol.for("bar") === Symbol.for("bar") // true
使用Symbol.for()
方法,同样参数创建的变量就是同一个值。因为使用这个方法创建的Symbol变量会把参数在全局登记。而Symbol()
创建的变量的参数则不会在全局登记。
let s1 = Symbol.for("foo"); Symbol.keyFor(s1) // "foo" let s2 = Symbol("foo"); Symbol.keyFor(s2) // undefined
使用Symbol.keyFor()
则可以变量找到全局登记的参数的名字。
Symbol.hasInstance
:其它对象使用instanceof
运算符的时候会使用该属性名指向的内部方法。
Symbol.isConcatSpreadable
Symbol.species
Symbol.match
Symbol.replace
Symbol.search
Symbol.split
Symbol.iterator
Symbol.toPrimitive
Symbol.toStringTag
Symbol.unscopables
Der Zweck besteht darin, Attributnamenkonflikte zu verhindern und sicherzustellen, dass jeder Attributname im Objekt eindeutig ist. rrreeeDer Symbol-Typ kann einen String-Parameter haben, der eine Beschreibung der Symbol-Instanz darstellt. Daher sind zwei Instanzen des Symboltyps mit derselben Beschreibung nicht gleich.
[]
verwenden müssen, um den Symboltyp als Attributnamen zu verwenden. Wenn es nicht verwendet wird, stellt es dieselbe Zeichenfolge wie der Variablenname und der Attributname dar. 🎜🎜🎜Symbol wird als Attributname verwendet. Beim Durchlaufen des Objekts wird dieses Attribut nicht in der for...in
-, for...of
-Schleife angezeigt. Es wird auch nicht zurückgegeben von Object.keys()
, Object.getOwnPropertyNames()
, JSON.stringify()
🎜🎜🎜🎜Allerdings Da es sich auch nicht um private Eigenschaften handelt, gibt es eine Methode Object.getOwnPropertySymbols()
, die alle Symboleigenschaftennamen des angegebenen Objekts abrufen kann. Diese Methode gibt ein Array zurück, dessen Mitglieder alle Symbolwerte sind, die als Eigenschaftsnamen des aktuellen Objekts verwendet werden. 🎜🎜Symbol.for()
, und die mit denselben Parametern erstellten Variablen haben denselben Wert. Weil die mit dieser Methode erstellte Symbolvariable die Parameter global registriert. Die Parameter von Variablen, die mit Symbol()
erstellt wurden, werden nicht global registriert. 🎜rrreee🎜Verwenden Sie Symbol.keyFor()
, um den Namen des global registrierten Parameters in einer Variablen zu finden. 🎜Symbol.hasInstance
: Wenn andere Objekte den Operator instanceof
verwenden, verwenden sie die interne Methode, auf die verwiesen wird der Attributname. 🎜🎜Symbol.isConcatSpreadable
🎜🎜Symbol.species
🎜🎜Symbol.match
🎜🎜Symbol.replace
🎜🎜 Symbol.search
🎜🎜Symbol.split
🎜🎜Symbol.iterator
🎜🎜Symbol.toPrimitive
🎜🎜Symbol.toStringTag
🎜🎜Symbol.unscopables
🎜🎜[Verwandte Empfehlungen: 🎜Javascript-Video-Tutorial🎜, 🎜Web-Frontend🎜]🎜Das obige ist der detaillierte Inhalt vonIst das ES6-Symbol ein Basistyp?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!