La conception du langage JavaScript n'est pas assez rigoureuse, et de nombreux endroits feront des erreurs si vous ne faites pas attention.
Par exemple, considérez les situations suivantes.
Maintenant, nous devons déterminer s'il existe un objet global, et s'il n'existe pas, déclarez-le. L'algorithme décrit en langue naturelle est le suivant:
if (myobj n'existe pas) {déclarer myobj; }Vous trouverez peut-être facile d'écrire ce code. Mais en fait, les problèmes grammaticaux qu'il implique sont beaucoup plus compliqués que nous ne le pensons. Juriy Zaytsev a souligné qu'il existe plus de 50 façons de déterminer s'il existe un objet JavaScript. Ce n'est que lorsque les détails de mise en œuvre de la langue JavaScript sont très clairs qu'ils peuvent être distingués.
La première façon d'écrire
Sur la base de votre intuition, vous pensez peut-être que vous pouvez écrire ceci:
if (! myObj) {myObj = {}; }Cependant, si vous exécutez ce code, le navigateur lancera directement une erreur de référence, ce qui entraînera l'interrompu l'opération. Qu'est-ce qui ne va pas?
Soit dit en passant, lorsque l'instruction IF détermine si MyOBJ est vide, cette variable n'existe pas encore, donc une erreur sera signalée. Changez-le en ce qui suit et il s'exécutera correctement.
if (! myObj) {var myObj = {}; }Pourquoi l'erreur ne sera-t-elle pas signalée après avoir ajouté un VAR? MyOBJ existe-t-il déjà dans cette affaire lorsque la déclaration IF fait des jugements?
Pour répondre à cette question, vous devez savoir comment fonctionne l'interpréteur JavaScript. La langue javascript est "analyser d'abord, exécuter plus tard". La déclaration variable est terminée pendant l'analyse, de sorte que le code ci-dessus est en fait équivalent à:
var myobj; if (! myObj) {var myObj = {}; }Par conséquent, lorsque l'instruction IF fait des jugements, MyOBJ existe, il n'y a donc pas d'erreur. Il s'agit de l'effet "amélioration du code" de la commande var. L'interpréteur JavaScript «élève» les variables définies par la commande var et ne fonctionne pas pour les variables qui n'utilisent pas la commande var et attribuent directement. C'est pourquoi cela provoquera une erreur si vous n'ajoutez pas VAR.
La deuxième façon d'écrire
En plus de la commande var, il peut y avoir une autre réécriture et vous pouvez également obtenir le résultat correct:
if (! window.myoBj) {myoBj = {}; }La fenêtre est l'objet de niveau supérieur de JavaScript, et toutes les variables globales sont ses propriétés. Par conséquent, juger si MyOBJ est vide équivaut à juger si l'objet Window a un attribut MyOBJ, afin d'éviter l'erreur de référence car MyOBJ n'est pas définie. Cependant, à partir de la normalisation du code, il est préférable d'ajouter VAR à la deuxième ligne:
if (! window.myoBj) {var myObj = {}; }Ou écrivez-le comme ceci:
if (! window.myoBj) {window.myobj = {}; }La troisième façon d'écrire
L'inconvénient de la méthode d'écriture ci-dessus est que dans certains environnements de fonctionnement (tels que V8 et Rhino), la fenêtre peut ne pas être un objet de niveau supérieur. Alors, pensez à le réécrire comme:
if (! this.myoBj) {this.myobj = {}; }Au niveau de la variable globale, ce mot-clé pointe toujours vers la variable de niveau supérieur, il peut donc être indépendant de différents environnements de fonctionnement.
La quatrième façon d'écrire
Cependant, l'écriture ci-dessus est mal lisible, et le pointage de ceci est variable et sujet aux erreurs, il est donc encore réécrit:
var global = this; if (! global.myoBj) {global.myobj = {}; }Il est beaucoup plus clair d'utiliser la variable personnalisée globale pour représenter l'objet de niveau supérieur.
La cinquième façon d'écrire
Vous pouvez également utiliser l'opérateur de type pour déterminer si MyOBJ est défini.
if (typeof myoBj == "Undefined") {var myoBj = {}; }Il s'agit de la méthode la plus utilisée pour déterminer s'il existe un objet JavaScript.
La sixième façon d'écrire
Étant donné que la valeur de MyOBJ est directement égale à non définie dans le cas de définie mais non attribuée, la méthode d'écriture ci-dessus peut être simplifiée:
if (myoBj == Undefined) {var myObj = {}; }Il y a deux endroits à noter ici. Tout d'abord, les mots clés VAR sur la deuxième ligne ne doivent pas être manquants, sinon une erreur de référence se produira. Deuxièmement, un non-défini ne peut pas être ajouté avec des devis simples ou doubles, car le type de données non défini est comparé ici, plutôt que la chaîne "non définie".
La septième façon d'écrire
La méthode d'écriture ci-dessus est toujours valable dans la condition de "comparaison précise" (===):
if (myoBj === Undefined) {var myObj = {}; }Le huitième façon d'écrire
Selon la conception de la langue de JavaScript, undefined == null, vous pouvez également obtenir le résultat correct en comparant si MyOBJ est égal à Null:
if (myoBj == null) {var myoBj = {}; }Cependant, bien que le résultat de l'opération soit correct, sémantiquement, cette méthode de jugement est erronée et doit être évitée. Parce que NULL fait référence à un objet vide qui a été attribué à NULL, c'est-à-dire que cet objet est en fait valorisé, tandis que Undefined fait référence à un objet qui n'existe pas ou n'a aucune affectation. Par conséquent, vous ne pouvez utiliser que "Compare Operator" (==) ici, et si vous utilisez "l'opérateur de comparaison exact" (===) ici, vous obtiendrez une erreur.
La neuvième façon d'écrire
Vous pouvez également utiliser l'opérateur In pour déterminer si MyOBJ est un attribut de l'objet de niveau supérieur:
if (! ('myobj' dans la fenêtre)) {window.myobj = {}; }La dixième façon d'écrire
Enfin, utilisez la méthode HasownProperty pour déterminer si MyOBJ est une propriété de l'objet de niveau supérieur:
if (! this.hasownproperty ('myoBj')) {this.myoBj = {}; }Résumer
1. Si vous déterminez seulement si l'objet existe, il est recommandé d'utiliser la cinquième méthode d'écriture.
2. Si en plus de savoir si l'objet existe, il est également nécessaire de déterminer si l'objet a une valeur nulle, il est recommandé d'utiliser la première méthode d'écriture.
3. Sauf indication contraire, toutes les variables doivent être déclarées à l'aide de la commande var.
4. Pour la plate-forme multipliée, il est recommandé d'éviter d'utiliser la fenêtre pour représenter les objets de niveau supérieur.
5. Dans la langue JavaScript, Null et Undefined sont sujets à la confusion. Dans les cas où les deux peuvent être impliqués, il est recommandé d'utiliser l'opérateur "Comparaison exacte" (===).
(sur)
L'exemple simple ci-dessus de la façon de juger si un objet JavaScript existe est tout le contenu que j'ai partagé avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.