Heim  >  Artikel  >  Web-Frontend  >  Ist das ES6-Symbol ein Basistyp?

Ist das ES6-Symbol ein Basistyp?

青灯夜游
青灯夜游Original
2022-03-08 16:59:382501Durchsuche

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.

Ist das ES6-Symbol ein Basistyp?

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...infor...of循环中,也不会被Object.keys()Object.getOwnPropertyNames()JSON.stringify()返回

但是,它也不是私有属性,有一个Object.getOwnPropertySymbols()方法,可以获取指定对象的所有Symbol属性名。该方法返回一个数组,成员是当前对象的所有用作属性名的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内置的属性值

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.

So verwenden Sie es in einem Objekt

rrreeeEs ist ersichtlich, dass Sie [] 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. 🎜🎜

So verwenden Sie denselben Symbolwert

rrreee🎜Verwenden Sie die Methode 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. 🎜

Wert des integrierten Attributs Symbol

🎜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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Was bedeutet Datenknoten?Nächster Artikel:Was bedeutet Datenknoten?