Symbol Ein neuer primitiver Datentyp, der Einzigartigkeit darstellt. Es ist der siebte Datentyp in JavaScript. Die anderen sechs sind: undefinierte, Null-, String-, Zahlen- und Objektdeklarationsmethoden
Symbolwerte werden über die Symbolfunktion generiert. Es gibt zwei Arten von Attributnamen von Objekten: eine ist die ursprüngliche Zeichenfolge und die andere ist der neue Symboltyp . Attributnamen sind vom Typ Symbol und eindeutig, sodass sie nicht mit anderen Attributnamen in Konflikt geraten.
sei s1=Symbol() sei s2=Symbol() console.log(s1) //Symbol() console.log(s2) //Symbol() console.log(s1===s2) //FALSCH //Die Symbolfunktion kann eine Zeichenfolge als Parameter akzeptieren, die die Beschreibung der Symbolinstanz angibt. let s1=Symbol('xxx') let s2=Symbol('hhh') console.log(s1) //Symbol(xxx) console.log(s2) //Symbol(hhh) console.log(s1===s2) //falseSie können den neuen Befehl nicht verwenden, bevor Sie den Code der
Symbolfunktion kopiert haben, und es wird ein Fehler gemeldet. Dies liegt daran, dass das generierte Symbol ein Wert eines primitiven Typs und kein Objekt ist. Das heißt, da Symbolwerte keine Objekte sind, können keine Eigenschaften hinzugefügt werden. Entspricht einer speziellen Zeichenfolge.
Symbol.for() akzeptiert eine Zeichenfolge als Parameter und sucht dann nach einem Symbolwert mit dem Parameter als Namen. Wenn dies der Fall ist, geben Sie den Symbolwert zurück. Andernfalls erstellen Sie einen neuen Symbolwert mit der Zeichenfolge als Namen und registrieren Sie ihn global.
sei s1 = Symbol.for('xxx') sei s2 = Symbol.for('xxx') console.log(s1 === s2) // wahr Funktion foo(){ return Symbol.for('hello') } const x=foo() const y=Symbol.for('hello') console.log(x === y)//true
Symbol.for() und Symbol() generieren ein neues Symbol. Der Unterschied besteht darin, dass Ersteres in der globalen Umgebung für die Suche registriert wird, Letzteres jedoch nicht. Symbol.for() gibt nicht bei jedem Aufruf einen neuen Symboltypwert zurück. Stattdessen prüft es zunächst, ob der angegebene Schlüssel bereits vorhanden ist, und erstellt dann einen neuen Wert, falls er nicht vorhanden ist.
Die Methode Symbol.keyFor() gibt den Schlüssel eines registrierten Symboltypwerts zurück.
const s1 = Symbol('foo') console.log(Symbol.keyFor(s1)) // undefiniert const s2 = Symbol.for('foo') console.log(Symbol.keyFor(s2)) //foo
. Da Symbolwerte nicht gleich sind, bedeutet dies, dass Symbolwerte als Bezeichner verwendet und in den Attributnamen verwendet werden können von Objekten, um sicherzustellen, dass sie nicht angezeigt werden. Ein Attribut mit demselben Namen wird angezeigt. Dies ist nützlich, wenn ein Objekt aus mehreren Modulen besteht, um zu verhindern, dass ein Schlüssel versehentlich überschrieben oder überschrieben wird.
const grade={ Zhang San:{address:'qqq',tel:'111'}, Li Si:{address:'aaa',tel:'222'}, Li Si:{address:'sss',tel:'333'}, } console.log(Klasse) //Zhang San: {Adresse: „qqq“, Tel.: „111“} Li Si: {Adresse: „sss“, Tel.: „333“} //Der Schlüsselwert des Objekts kann nicht wiederholt werden, der nachfolgende Wert überschreibt den vorherigen //Verwenden Sie Symbol zum Lösen, was einer eindeutigen Zeichenfolge entspricht const stu1=Symbol('李思') const stu2=Symbol('李思') console.log(stu1===stu2) //FALSCH const grade={ [stu1]:{address:'aaa',tel:'222'}, [stu2]:{address:'sss',tel:'333'}, } console.log(Klasse) //John Doe: {address:'sss',tel:'222'} John Doe: {address:'sss',tel:'333'} console.log(grade[stu1]) //Li Si: {address:'sss',tel:'222'} console.log(grade[stu2]) //Li Si: {address:'sss',tel:'333'}
const sym=Symbol('imooc') Klassenbenutzer{ Konstruktor(Name){ this.name=name this[sym]='imooc.com' } getName(){ gib this.name+this[sym] zurück } } const user=neuer Benutzer('www') //Die for in-Methode kann nicht zum Symbol-Attribut wechseln, da es ausgeblendet ist for(let key in user){ console.log(key)//name } //Object.keys(obj)-Methode kann nicht zur Symbol-Eigenschaft wechseln for(let key of Object.keys(user)){ console.log(key)//name } //Object.getOwnPropertySymbols(obj) kann nur die Symbol-Eigenschaft abrufen for(let key of Object.getOwnPropertySymbols(user)){ console.log(key)//Symbol(imooc) } //Reflect.ownKeys(obj) Objekteigenschaften können abgerufen werden for(let key of Reflect.ownKeys(user)){ console.log(Schlüssel) //Name //Symbol(imooc) }
Magische Zeichenfolgen beziehen sich auf eine bestimmte Zeichenfolge oder einen bestimmten Wert, der im Code mehrmals vorkommt und eine starke Kopplung mit dem Code eingeht. Code mit gutem Stil sollte versuchen, magische Zeichenfolgen zu eliminieren und sie durch Variablen mit klarer Bedeutung zu ersetzen.
Funktion getArea(shape) { sei Fläche = 0 Schalter (Form) { Fall 'Dreieck': Fläche=1 brechen Fall 'Kreis': Fläche=2 brechen } Rückgabebereich } console.log(getArea('Triangle')) //Dreieck und Kreis sind magische Saiten. Es erscheint häufig und bildet eine „starke Kopplung“ mit dem Code, die einer späteren Änderung und Wartung nicht förderlich ist. const shapeType = { Dreieck: Symbol(), Kreis: Symbol() } Funktion getArea(shape) { sei Fläche = 0 Schalter (Form) { Fall shapeType.triangle: Fläche=1 brechen GehäuseformType.circle: Fläche=2 brechen } Rückgabebereich } console.log(getArea(shapeType.triangle))
Ich bin ein Front-End-Neuling. Wenn der Artikel einen Fehler enthält, geben Sie mir bitte einige Ratschläge und Diskussionen!
[Empfehlung für ein entsprechendes Video-Tutorial: Web-Frontend]
Das Obige ist der detaillierte Inhalt des JavaScript-Datentyplernens und eine kurze Analyse des Symboltyps. Weitere Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!