65 votes

javascript: définir une variable si elle n'existe pas

Hé tout le monde, j'ai l'impression que j'essaie de faire quelque chose de super simple, mais juste d'être stupide à ce sujet.

tout ce que je veux faire est de voir si une variable a été définie précédemment, et si elle ne l'a pas été, définissez-la avec une valeur par défaut .... voici un exemple:

 if(!embed_BackgroundColor) {
    var embed_BackgroundColor;
    embed_BackgroundColor = "#F4F4F4";
}
 

donc, une fois que vous arrêtez de rire de mon code .... POURQUOI écrase-t-il la variable quoi qu'il arrive?

s'il te plait sauve mes nerfs;)

103voto

user3021198 Points 117

Style professionnel:

 var SomeVar = SomeVar || 'Default Value';
 

80voto

Paolo Bergantino Points 199336
if (typeof variable === 'undefined') {
    // variable is undefined
    // eg:
    // var variable = "someValue";
}

32voto

Zecc Points 2385

Pour effectivement répondre à votre question de savoir POURQUOI ce qui se passe-c'est seulement un peu plus de deux ans et un mois :D -- , c'est à cause de la variable de levage.

Fondamentalement, il y a une phase avant l'exécution de code dans la portée globale ou à l'intérieur d'une fonction où le code est scanné pour tous var et function des déclarations (à ne pas confondre avec la fonction d'expressions, mais c'est une autre histoire).
Toutes ces variables et les fonctions sont alors déclarés à l'intérieur du périmètre actuel, et ensuite seulement, le code exécuté.

Cela se produit indépendamment de leur position dans le code, avec des étendues correspondant à la fonction des organes, pas de blocs d'instructions. Et ce qui rend cette situation encore plus contre-intuitif, même si vous définissez une valeur initiale des variables dans leurs déclarations, ils vont rester encore "vide" jusqu'à ce que la déclaration est atteint de nouveau dans le flux d'exécution normale.

Donc, lorsque vous écrivez:

if(!embed_BackgroundColor) {
    var embed_BackgroundColor;
    embed_BackgroundColor = "#F4F4F4";
}

ce qui se passe réellement est ceci:

  1. Code est scanné pour var des déclarations. embed_BackgroundColor est déclarée à l'intérieur de ce champ d'application, indépendamment de savoir si elle a déjà été déclarée ou non. Sa valeur initiale est indéfini.

  2. L'exécution du code commence. L' if exécution de l'instruction. La variable est déclarée, mais sa valeur n'est pas définie, de sorte que la condition est vraie. À l'aide de typeof ne serait pas vous aider à distinguer ici entre un non déclaré et a déclaré-mais-pas-encore-ensemble de variables. Il ne fait aucune différence de toute façon.

  3. L' var déclaration est atteint par le flux normal du code. Si vous avait donné à la variable une valeur initiale, il aurait été réglé aujourd'hui. Dans ce cas, rien ne se passe.

  4. embed_BackgroundColor à la valeur "#F4F4F4".

Ainsi, la ligne de fond est la suivante: vous pouvez utiliser typeof variable == 'undefined' comme on le voit dans les autres réponses, ou même simplement"!la variable " comme il vous a été initialement à l'aide, mais ne pas utiliser var ou, ce qui gâcherait tout.

10voto

Moss Points 1128

Je préfère cette syntaxe:

embed_BackgroundColor = embed_BackgroundColor || "#F4F4F4"

Rien de plus simple que ça! Et cela semble fonctionner même s'il a été modifié.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X