Symbole Un nouveau type de données primitif qui représente l'unicité. Il s'agit du septième type de données en JavaScript.
Les six autres sontundefined, null, String, Number et Object
. Les valeurs de symbole sont générées via la fonction Symbol. Il existe deux types de noms d'attributs d'objets, l'un est la chaîne d'origine et l'autre est le nouveau type Symbol . Les noms d'attribut sont du type Symbole et sont uniques, garantissant qu'ils n'entreront pas en conflit avec d'autres noms d'attribut.
soit s1=Symbole() laissez s2=Symbole() console.log(s1) //Symbole() console.log(s2) //Symbole() console.log(s1===s2) //FAUX //La fonction Symbol peut accepter une chaîne comme paramètre, indiquant la description de l'instance de Symbol let s1=Symbol('xxx') laissez s2=Symbole('hhh') console.log(s1) //Symbole(xxx) console.log(s2) //Symbole(hhh) console.log(s1===s2) //falseVous ne pouvez pas utiliser la nouvelle commande avant de copier le code de
la fonction Symbol, et une erreur sera signalée. En effet, le symbole généré est une valeur de type primitif, pas un objet. Autrement dit, puisque les valeurs des symboles ne sont pas des objets, les propriétés ne peuvent pas être ajoutées. Équivalent à une chaîne spéciale.
Symbol.for() accepte une chaîne comme paramètre, puis recherche une valeur Symbol avec le paramètre comme nom. Si tel est le cas, renvoyez la valeur Symbol, sinon créez une nouvelle valeur Symbol avec la chaîne comme nom et enregistrez-la globalement.
soit s1 = Symbole.for('xxx') soit s2 = Symbole.for('xxx') console.log(s1 === s2) // vrai fonction foo(){ return Symbol.for('bonjour') } const x=foo() const y=Symbol.for('bonjour') console.log(x === y)//true
Symbol.for() et Symbol() généreront un nouveau symbole. La différence est que les premiers seront enregistrés dans l’environnement mondial pour la recherche, tandis que les seconds ne le seront pas. Symbol.for() ne renverra pas une nouvelle valeur de type Symbol à chaque appel, mais vérifiera d'abord si la clé donnée existe déjà, puis créera une nouvelle valeur si elle n'existe pas.
La méthode Symbol.keyFor() renvoie la clé d'une valeur de type Symbol enregistrée.
const s1 = Symbole('foo') console.log(Symbol.keyFor(s1)) // non défini const s2 = Symbole.pour('foo') console.log(Symbol.keyFor(s2)) //
. Puisque les valeurs des symboles ne sont pas égales, cela signifie que les valeurs des symboles peuvent être utilisées comme identifiants et utilisées dans les noms d'attribut. des objets pour s'assurer qu'ils ne seront pas Un attribut portant le même nom apparaît. Ceci est utile lorsqu'un objet est composé de plusieurs modules, pour éviter qu'une clé ne soit accidentellement écrasée ou écrasée.
note const={ Zhang San :{adresse :'qqq',tél:'111'}, Li Si :{adresse :'aaa',tél:'222'}, Li Si :{adresse :'sss',tél:'333'}, } console.log(grade) //Zhang San : {adresse : "qqq", tél : "111"} Li Si : {adresse : "sss", tél : "333"} //La valeur clé de l'objet ne peut pas être répétée. S'il y a une répétition, la valeur suivante écrasera la précédente //Utiliser le symbole pour résoudre, ce qui équivaut à une chaîne unique const stu1=Symbol('李思') const stu2=Symbole('李思') console.log(stu1===stu2) //FAUX note const={ [stu1] : {adresse : 'aaa', tél : '222'}, [stu2] : {adresse : 'sss', tél : '333'}, } console.log(grade) //John Doe : {adresse : 'sss', tel: '222'} John Doe : {adresse : 'sss', tel: '333'} console.log(grade[stu1]) //Li Si : {adresse : 'sss', tél : '222'} console.log(grade[stu2]) //Li Si : {adresse : 'sss', tel :'333'}
const sym=Symbol('imooc') Utilisateur de classe{ constructeur (nom) { this.name=nom this[sym]='imooc.com' } getName(){ renvoyer this.name+this[sym] } } const utilisateur = nouvel utilisateur ('www') //La méthode for in ne peut pas accéder à l'attribut Symbol car il est masqué for(let key in user){ console.log(clé)//nom } //La méthode Object.keys(obj) ne peut pas accéder à la propriété Symbol for(let key of Object.keys(user)){ console.log(clé)//nom } //Object.getOwnPropertySymbols(obj) ne peut obtenir la propriété Symbol que pour (let key of Object.getOwnPropertySymbols(user)){ console.log(key)//Symbole(imooc) } //Les propriétés de l'objet Reflect.ownKeys(obj) peuvent être obtenues pour(let key of Reflect.ownKeys(user)){ console.log(clé) //nom //Symbole (imooc) }
Les chaînes magiques font référence à une chaîne ou une valeur spécifique qui apparaît plusieurs fois dans le code et forme un couplage fort avec le code. Un code avec un bon style devrait essayer d'éliminer les chaînes magiques et de les remplacer par des variables ayant des significations claires.
fonction getArea(forme) { soit la zone = 0 interrupteur (forme) { cas 'Triangle' : zone=1 casser cas 'Cercle' : zone = 2 casser } zone de retour } console.log(getArea('Triangle')) //Triangle et Cercle sont des chaînes magiques. Il apparaît de nombreuses fois, formant un « couplage fort » avec le code, peu propice aux modifications et maintenances ultérieures. const shapeType = { triangle : Symbole(), cercle : Symbole() } fonction getArea(forme) { soit la zone = 0 interrupteur (forme) { cas shapeType.triangle : zone=1 casser cas shapeType.circle : zone = 2 casser } zone de retour } console.log(getArea(shapeType.triangle))
Je suis un novice du front-end S'il y a une erreur dans l'article, donnez-moi quelques conseils et discussion !
[Recommandation du didacticiel vidéo associé : front-end Web]
Ce qui précède est le contenu détaillé de l'apprentissage du type de données JavaScript et une brève analyse du type Symbol. Pour plus d'informations, veuillez prêter attention aux autres articles connexes sur le site Web chinois de PHP !