Cet article vous apporte une introduction détaillée (exemple de code) sur Symbol dans ES6. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Symbol est un nouveau type de données primitif introduit dans ES6 qui représente une valeur unique.
Caractéristiques du symbole
1. Le symbole est créé via la fonction d'usine et ne peut pas être créé par new, donc le résultat renvoyé en utilisant l'opérateur instanceof est faux
var sym = Symbol(); var sym1 = new Symbol(); // TypeError sym instanceof Symbol // false
2. Le symbole utilise l'opérateur typeof pour renvoyer "symbole"
var sym = Symbol('foo'); typeof sym; // "symbol"
3. La fonction d'usine de symboles peut prendre en charge un paramètre facultatif pour décrire le symbole actuel
var sym2 = Symbol('foo'); var sym3 = Symbol('foo');
4.Le symbole est le seul , Symbol("foo") == Symbol("foo") renvoie false
Symbol('foo') === Symbol('foo'); // false
5 Lorsque Symbol est utilisé avec une valeur numérique ou une chaîne, une exception sera levée
<🎜. >sym | 0 // TypeError Symbol("foo") + "bar" // TypeError
var obj = {}; obj[Symbol("a")] = "a"; obj[Symbol.for("b")] = "b"; obj["c"] = "c"; obj.d = "d"; for (var i in obj) { console.log(i); // logs "c" and "d" }
JSON.stringify({[Symbol("foo")]: "foo"}); // '{}'
var mySymbol1 = Symbol.for('some key'); var mySymbol2 = Symbol.for('some key'); mySymbol1 == mySymbol2 //true
const myPrivateMethod = Symbol("myPrivateMethod"); const myPrivateProperty = Symbol("myPrivateProperty"); const obj = { [myPrivateProperty]: "semlinker", [myPrivateMethod]() { return `Hello ${this[myPrivateProperty]}!!!`; }, hello() { console.log(this[myPrivateMethod]()); } }; console.log(Object.keys(obj)); console.log(obj.hello());
const myPrivateMethod = Symbol("myPrivateMethod"); const myPrivateProperty = Symbol("myPrivateProperty"); class MyClass { constructor() { this[myPrivateProperty] = "semlinker"; } [myPrivateMethod]() { return `Hello ${this[myPrivateProperty]}!!!`; } hello() { console.log(this[myPrivateMethod]()); } } const myCls = new MyClass(); console.log(myCls.hello());
class Skill { constructor() { this.skills = ['Angular', 'React', 'Vue', 'Koa', 'Ionic']; } [Symbol.iterator]() { let index = 0; return { next: () => { const value = this.skills[index++]; const done = index === this.skills.length + 1; return { value, done }; } } } } const mySkills = new Skill(); console.log([...mySkills]); for (let skill of mySkills) { console.log(`My skill is ${skill}`); }
'angular'.search('ng') // 4
// pseudo code for String class class String { constructor(value) { this.value = value; } search(obj) { obj[Symbol.search](this.value); } } class RegExp { constructor(value) { this.value = value; } [Symbol.search](string) { return string.indexOf(this.value); } }
class Article { constructor(tag) { this.tag = tag; } [Symbol.search](string) { return string.indexOf(this.tag) >= 0 ? 'Found' : 'Not_Found'; } } var article = new Article('Angular'); console.log('Angular7'.search(article)); // Found console.log('重温ES6'.search(article)); // Not_Found
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!