Maison > interface Web > Questions et réponses frontales > Comment déclarer des constantes en lecture seule dans ES6

Comment déclarer des constantes en lecture seule dans ES6

青灯夜游
Libérer: 2023-01-11 17:38:56
original
2035 Les gens l'ont consulté

Dans es6, vous pouvez utiliser le mot-clé const pour déclarer des constantes en lecture seule, la syntaxe est "nom de la constante const = valeur constante ;" ; une fois déclarée, la constante doit être initialisée et la valeur initialisée ne peut pas être modifiée. Les constantes déclarées comme const appartiennent à la portée du bloc et sont soumises à la "zone morte temporaire". Elles ne créeront aucune propriété globale sur la fenêtre et ne peuvent pas être réaffectées ou redéclarées.

Comment déclarer des constantes en lecture seule dans ES6

L'environnement d'exploitation de ce tutoriel : système Windows 7, ECMAScript version 6, ordinateur Dell G3.

Dans es6, vous pouvez utiliser le mot-clé const pour déclarer des constantes en lecture seule.

es6 const mot-clé

const déclare une constante en lecture seule. Une fois déclarée, une constante doit être initialisée et la valeur initialisée ne peut pas être modifiée. Les constantes

const PI = 3.1415;
PI // 3.1415

PI = 3;
// TypeError: Assignment to constant variable.
Copier après la connexion

const obéissent aux règles suivantes :

  • appartient à la portée du bloc.

  • Sous réserve de la « zone morte temporaire ».

  • Il ne crée aucune propriété globale sur la fenêtre.

  • Non redistribuable.

  • ne peut pas être reformulé.

const Une fois qu'une variable est déclarée, elle doit être initialisée immédiatement.

const foo;
// SyntaxError: Missing initializer in const declaration
Copier après la connexion

Le code ci-dessus indique que pour const, si vous déclarez simplement sans attribuer de valeur, une erreur sera signalée.

La portée de const est la même que celle de la commande let : elle n'est valide que dans la portée au niveau du bloc où elle est déclarée.

if (true) {
  const MAX = 5;
}

MAX // Uncaught ReferenceError: MAX is not defined
Copier après la connexion

Les constantes déclarées par la commande const ne sont pas non plus promues. Il existe également une zone morte temporaire et ne peuvent être utilisées qu'après la position déclarée.

if (true) {
  console.log(MAX); // ReferenceError
  const MAX = 5;
}
Copier après la connexion

Le code ci-dessus est appelé avant que la constante MAX ne soit déclarée et une erreur est signalée.

La constante déclarée par const ne peut pas être déclarée à plusieurs reprises comme let.

var message = "Hello!";
let age = 25;

// 以下两行都会报错
const message = "Goodbye!";
const age = 30;
Copier après la connexion

L'essence de const

const garantit en fait que ce n'est pas que la valeur de la variable ne peut pas être modifiée, mais que les données stockées dans l'adresse mémoire pointée par la variable ne peuvent pas être modifiées. Pour les types de données simples (valeurs numériques, chaînes, valeurs booléennes), la valeur est stockée à l'adresse mémoire pointée par la variable, et équivaut donc à une constante. Mais pour les données de type composite (principalement des objets et des tableaux), l'adresse mémoire pointée par la variable ne stocke qu'un pointeur vers les données réelles. Const ne peut que garantir que ce pointeur est fixe (c'est-à-dire qu'il pointe toujours vers une autre adresse fixe). , quant à savoir si la structure de données vers laquelle elle pointe est variable, elle est complètement hors de contrôle. Par conséquent, vous devez être très prudent lorsque vous déclarez un objet comme constante.

const foo = {};

// 为 foo 添加一个属性,可以成功
foo.prop = 123;
foo.prop // 123

// 将 foo 指向另一个对象,就会报错
foo = {}; // TypeError: "foo" is read-only
Copier après la connexion

Dans le code ci-dessus, la constante foo stocke une adresse qui pointe vers un objet. La seule chose qui est immuable est cette adresse, c'est-à-dire que vous ne pouvez pas pointer foo vers une autre adresse, mais l'objet lui-même est mutable, vous pouvez donc toujours lui ajouter de nouvelles propriétés.

Voici un autre exemple.

const a = [];
a.push('Hello'); // 可执行
a.length = 0;    // 可执行
a = ['Dave'];    // 报错
Copier après la connexion

Dans le code ci-dessus, la constante a est un tableau. Le tableau lui-même est accessible en écriture, mais si un autre tableau est affecté à a, une erreur sera signalée.

Si vous souhaitez vraiment geler l'objet, vous devez utiliser la méthode Object.freeze.

const foo = Object.freeze({});

// 常规模式时,下面一行不起作用;
// 严格模式时,该行会报错
foo.prop = 123;
Copier après la connexion

Dans le code ci-dessus, la constante foo pointe vers un objet gelé, donc l'ajout de nouveaux attributs ne fonctionnera pas et une erreur sera signalée en mode strict.

En plus de geler l'objet lui-même, les propriétés de l'objet doivent également être gelées. Vous trouverez ci-dessous une fonction qui fige complètement un objet.

var constantize = (obj) => {
  Object.freeze(obj);
  Object.keys(obj).forEach( (key, i) => {
    if ( typeof obj[key] === 'object' ) {
      constantize( obj[key] );
    }
  });
};
Copier après la connexion

【Recommandations associées : Tutoriel vidéo javascript, Vidéo de programmation

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal