Maison >interface Web >js tutoriel >Type de données de symbole en javascript
Le type de données Symbole en JavaScript est un type de données de base utilisé pour représenter des valeurs uniques. Caractéristiques du Symbole : 1. Unique, chaque valeur du Symbole est unique et ne sera égale à aucune autre valeur ; 2. Immuabilité, une fois la valeur du Symbole créée, elle ne peut pas être modifiée ou réaffectée 3. Caractère caché, la valeur du Symbole ne peut pas être ; modifié ou réaffecté ; il sera implicitement converti en d'autres types ; 4. Il ne peut pas être énuméré lorsque la valeur du symbole est utilisée comme nom d'attribut de l'objet, elle n'est pas énumérable par défaut.
Le type de données Symbole en JavaScript est une nouvelle fonctionnalité introduite par ES6. Il s'agit d'un type de données de base utilisé pour représenter des valeurs uniques. Les valeurs des symboles peuvent être utilisées comme noms d'attributs d'objets pour résoudre le problème des conflits de noms d'attributs. Cet article présentera en détail les caractéristiques, l'utilisation et certains scénarios d'application courants du type de données Symbol.
1. Caractéristiques du symbole
1. Unique : chaque valeur de symbole est unique et ne sera égale à aucune autre valeur, même si la description de la valeur du symbole est la même. Cela signifie que vous pouvez utiliser la valeur Symbol comme nom d'attribut de l'objet pour garantir l'unicité du nom d'attribut et éviter les conflits de noms d'attribut.
2. Immuabilité : une fois qu'une valeur de symbole est créée, elle ne peut pas être modifiée ou réaffectée. Ceci est différent des types de données tels que les chaînes et les nombres, qui peuvent modifier leur valeur par réaffectation, tandis que les valeurs des symboles sont immuables.
3. Hiddenness : les valeurs des symboles ne seront pas implicitement converties en d'autres types. Par exemple, l’ajout d’une valeur Symbol à une chaîne ne donnera pas le résultat attendu, mais générera une TypeError. Ce masquage évite les problèmes inattendus de conversion de type.
4. Inénumérable : lorsque la valeur du symbole est utilisée comme nom d'attribut de l'objet, elle n'est pas énumérable par défaut. Cela signifie que le nom de la propriété Symbol ne peut pas être obtenu à l'aide de la boucle for...in ou de la méthode Object.keys(). Cette fonctionnalité peut être utilisée pour masquer la traversée de certains attributs.
2. Utilisation du symbole
1. Créer une valeur de symbole : vous pouvez utiliser la fonction Symbol() pour créer une valeur de symbole. Cette fonction peut accepter un paramètre de description facultatif pour identifier le but ou la signification de la valeur du symbole.
let sym = Symbol(); console.log(typeof sym); // "symbol" let symWithDesc = Symbol("description"); console.log(symWithDesc.toString()); // "Symbol(description)"
2. Utiliser le symbole comme nom d'attribut : vous pouvez utiliser la valeur du symbole comme nom d'attribut de l'objet pour garantir l'unicité du nom d'attribut.
let obj = { [Symbol("key")]: "value" }; console.log(obj[Symbol("key")]); // undefined,每次使用Symbol()函数创建的Symbol值都是不相等的 let sym = Symbol("key"); obj[sym] = "new value"; console.log(obj[sym]); // "new value"
3. Obtenez les noms de propriétés Symbol : vous pouvez utiliser la méthode Object.getOwnPropertySymbols() pour obtenir tous les noms de propriétés Symbol de l'objet.
let obj = { [Symbol("key1")]: "value1", [Symbol("key2")]: "value2" }; let symbols = Object.getOwnPropertySymbols(obj); console.log(symbols); // [Symbol(key1), Symbol(key2)] console.log(obj[symbols[0]]); // "value1"
4. Propriétés intégrées des symboles : les valeurs des symboles ont des propriétés intégrées qui peuvent être utilisées pour modifier le comportement par défaut des objets.
- Symbol.iterator : utilisé pour définir la méthode itérateur par défaut des objets.
- Symbol.toStringTag : utilisé pour modifier la balise chaîne renvoyée par la méthode toString() par défaut de l'objet.
- Symbol.hasInstance : utilisé pour définir le comportement par défaut de l'opérateur instanceof pour les objets.
- Symbol.toPrimitive : utilisé pour définir le comportement par défaut des objets convertis en valeurs primitives.
let obj = { [Symbol.iterator]: function* () { yield 1; yield 2; }, [Symbol.toStringTag]: "MyObject" }; console.log([...obj]); // [1, 2] console.log(obj.toString()); // "[object MyObject]"
3. Scénarios d'application de Symbol
1. Résolution des conflits de noms d'attribut : l'utilisation de la valeur de symbole comme nom d'attribut de l'objet peut éviter les conflits de noms d'attribut entre différents modules ou bibliothèques.
2. Définir des constantes : vous pouvez utiliser les valeurs des symboles pour définir des constantes afin de garantir l'unicité des constantes.
const RED = Symbol("red"); const BLUE = Symbol("blue");
3. Attributs cachés : l'utilisation de la valeur du symbole comme nom d'attribut de l'objet peut masquer certains attributs pour empêcher leur traversée.
let obj = { [Symbol("hidden")]: "value", visible: "value" }; for (let key in obj) { console.log(key); // "visible",Symbol属性名不可枚举 }
4. Étendre les objets intégrés : vous pouvez utiliser les valeurs de symboles pour étendre les fonctionnalités des objets intégrés et leur ajouter des méthodes ou des propriétés personnalisées.
Array.prototype[Symbol.iterator] = function* () { for (let i = 0; i < this.length; i++) { yield this[i]; } }; let arr = [1, 2, 3]; console.log([...arr]); // [1, 2, 3]
Pour résumer, le type de données Symbol est un type de données de base en JavaScript, utilisé pour représenter des valeurs uniques. Il présente les caractéristiques d'être unique, immuable, masqué et non énumérable, et peut être utilisé dans des scénarios tels que la résolution de conflits de noms de propriétés, la définition de constantes, le masquage de propriétés et l'extension d'objets intégrés. La création et l'utilisation des valeurs Symbole sont relativement simples, mais vous devez faire attention à sa particularité et à son caractère caché pour éviter des problèmes inattendus.
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!