Le symbole
es6 est un type de base. Symbol est un nouveau type de données de base introduit dans es6, qui représente une valeur unique ; sa fonction est d'éviter les conflits de noms d'attribut et de garantir que chaque nom d'attribut dans l'objet est unique.
L'environnement d'exploitation de ce tutoriel : système Windows 7, ECMAScript version 6, ordinateur Dell G3.
Symbol
est un type de données de base, un nouveau type de données introduit dans ES6. 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
Le but est de prévenir les conflits de noms d'attribut et de garantir que chaque nom d'attribut dans l'objet est unique. rrreeeLe type Symbol peut avoir un paramètre de chaîne représentant une description de l'instance Symbol. Ainsi, deux instances du type Symbol avec la même description ne sont pas égales.
[]
. S'il n'est pas utilisé, il représente la même chaîne que le nom de la variable et le nom de l'attribut. 🎜🎜🎜Le symbole est utilisé comme nom d'attribut lors de la traversée de l'objet, cet attribut n'apparaîtra pas dans la boucle for...in
, for...of
, il ne sera pas non plus renvoyé par Object.keys()
, Object.getOwnPropertyNames()
, JSON.stringify()
🎜🎜🎜🎜Cependant, il n'est pas non plus privé dans les propriétés, il existe une méthode Object.getOwnPropertySymbols()
, qui peut obtenir tous les noms de propriétés Symbol de l'objet spécifié. Cette méthode renvoie un tableau dont les membres sont tous des valeurs de symboles utilisées comme noms de propriétés de l'objet actuel. 🎜🎜Symbol.for()
, et les variables créées avec les mêmes paramètres auront la même valeur. Parce que la variable Symbol créée à l’aide de cette méthode enregistrera les paramètres globalement. Les paramètres des variables créées par Symbol()
ne seront pas enregistrés globalement. 🎜rrreee🎜Utilisez Symbol.keyFor()
pour trouver le nom du paramètre globalement enregistré dans une variable. 🎜Symbol.hasInstance
: lorsque d'autres objets utilisent l'opérateur instanceof
, ils utiliseront la méthode interne pointée par le nom de l'attribut. 🎜🎜Symbol.isConcatSpreadable
🎜🎜Symbol.species
🎜🎜Symbol.match
🎜🎜Symbol.replace
🎜🎜 Symbol.search
🎜🎜Symbol.split
🎜🎜Symbol.iterator
🎜🎜Symbol.toPrimitive
🎜🎜Symbol.toStringTag
🎜🎜Symbol.unscopables
🎜🎜[Recommandations associées : 🎜tutoriel vidéo javascript🎜, 🎜front-end web🎜]🎜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!