当前位置:网站首页>JS es5 peut également créer des constantes?

JS es5 peut également créer des constantes?

2022-07-07 01:38:00 Director of Moral Education Division

Introduction à cet article

- Oui. + Attention + Collection = J'ai appris.


ES6 Quand il a été lancé,let Et const La plupart des gens devraient apprendre ES6 Le premier point de connaissance de.

Parmi eux const Peut être utilisé pour définir Constante ,Définir les données qui n'ont pas besoin d'être modifiées comme une constante.

Mais en fait, ES6 Nous avions déjà une façon de définir les constantes.



ES 5 Créer une constante

Object.defineProperty Utilisation de base de

In ES6 Pas avant. const De,Si une définition est nécessaireConstante,Peut être utilisé Object.defineProperty .

Beaucoup de gens le savent. Vue2 Utiliser Object.defineProperty Surveillance des changements de données,Mais pas nécessairement. Object.defineProperty Peut également être utilisé pour définir des constantes.


Object.defineProperty La méthode définit une nouvelle propriété directement sur un objet,Ou modifier les propriétés existantes d'un objet,Et renvoie cet objet.

Object.defineProperty(obj, prop, descriptor) Réception3Paramètres

  • obj: Objet pour définir les propriétés.
  • prop: Nom de l'attribut à définir ou à modifier ou Symbol .
  • descriptor: Descripteur de propriété à définir ou à modifier.

Par exemple,

var LH = {}
Object.defineProperty(LH, 'name', {
  value: 'Thunder Monkey'
})

console.log(LH) // Produits: {name: 'Thunder Monkey'}

LH.name = 'Requin Chili'

console.log(LH)  // Produits: {name: 'Thunder Monkey'}

Essayez le code ci - dessus dans votre navigateur .

Pourquoi modifier LH.name C'est nul.?Parce que descriptor Sauf que value Au - delà,Il y a d'autres propriétés,Par exemple, writable Peut être utilisé pour définir si l'objet est autorisé à être modifié ,Par défaut false , C'est - à - dire qu'il ne peut pas être modifié .

Alors... LH.name = 'Requin Chili' Modification non valable.

Si writable Modifier comme suit: true Et ça pourrait être modifié

var LH = {}
Object.defineProperty(LH, 'name', {
  value: 'Thunder Monkey',
  writable: true // Autoriser les modifications
})

console.log(LH) // Produits: {name: 'Thunder Monkey'}

LH.name = 'Requin Chili'

console.log(LH)  // Produits: {name: 'Requin Chili'}

Créer une constante

En suivant l'idée ci - dessus,Si nous mettons LH Modifier comme suit: window , Est - ce que ça pourrait juste être dans window Définir un attribut sur , Et cette propriété est globale , Peut être appelé n'importe où après la définition .


Object.defineProperty(window, 'NAME', {
  value: 'Thunder Monkey'
})

console.log(NAME) // Produits: Thunder Monkey

NAME = 'Requin Chili'
console.log(NAME) // Produits: Thunder Monkey

window.NAME = 'Cafard tyran'
console.log(NAME) // Produits: Thunder Monkey

Quelle que soit la modification ,NAME Ce sont les valeurs définies au début .



La constante peut changer la valeur ?

Constante créée ci - dessus ,value C'est unType de données de baseValeur de.Si vous changezType de référenceValeur de, Ce contenu est modifiable .

Object.defineProperty(window, 'NAME', {
  value: {
    nickname: 'Thunder Monkey'
  }
})

console.log(NAME)

NAME.nickname = 'Requin Chili'

console.log(NAME)

La raison en est que, Une constante verrouillée est l'adresse mémoire à laquelle elle est définie .

Lors de la définition du type de données de base , L'adresse mémoire pointe directement vers cette valeur .Mais la définitionType de référenceHeure, L'adresse mémoire contient l'adresse de référence . Donc la définition d'une constante fait référence à L'adresse de référence ne peut pas être modifiée .



Compatibilité

Utiliser Object.defineProperty Une attention particulière doit être accordée à la compatibilité lors de la définition des constantes

file



Lectures recommandées

《Object.defineProperty Peut également surveiller les changements de tableau ?》

《Vue3 Oui.10 Mode de communication des composants 》

《console.logPeut également être illustré!!!》

《Principe et méthode de réalisation de l'effet parallaxe》


- Oui. + Attention + Collection = J'ai appris.

- Oui. + Attention + Collection = J'ai appris.

原网站

版权声明
本文为[Director of Moral Education Division]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/188/202207061807155856.html