2011-11-30 4 views
3

Je possède ce code JavaScript:Que fait ce code JavaScript?

var JSON; 
JSON||(JSON={}); 

Pouvez-vous dire ce que ce code est en train de faire?

+0

Si c'est l'extrait exactement, alors il est un moyen très rond-point de faire 'var JSON = {}; c', ce qui crée un nouvel objet et assigne à la variable 'JSON'. – Ryan

Répondre

1

Il étend une variable appelée JSON, puis utilise la nature de court-circuit de l'opérateur || pour affecter un objet vide à cette variable, sauf si cette variable a une valeur de vérité.

+0

"vérité" - LOL! – BentOnCoding

+2

@Robotsushi - c'est ce que ça s'appelle. theres aussi falsey. –

+0

@Robotsushi: N'est-ce pas le terme officiel? – Ryan

0

Il fait juste JSON un objet vide.

0

Je pense que cela dit: si la variable 'JSON' est nulle, créez un objet javascript vide.

+0

Non. Il teste si c'est "null" ou "undefined" ou toute autre valeur falsifiée.et si c'est le cas, il affecte un objet JavaScript. Il n'y a pas de JSON (excepté le nom d'une variable mal nommée). – Quentin

4

var JSON déclare une variable globale (ou autre portée).

JSON||(JSON={}); est d'abord vérifier si JSON évalue à vrai ou faux, et si faux, alors JSON est mis à un objet vide;

+0

Il ne vérifie pas s'il a une valeur. Il pourrait avoir 'false',' 0', '" "' ou un certain nombre d'autres choses et toujours obtenir un objet vide assigné. – Quentin

+0

@Quentin - oops "a une valeur, si non" aurait dû être "évalue à vrai ou faux, et si faux" – mrk

2

Il est assez inutile dans ce contexte,

var JSON; 

crée une variable nommée JSON

La deuxième partie,

JSON||(JSON={}); 

est équivalent à

if(!JSON){ 
    JSON = {}; 
} 

Tout cela peut être ignoré et écrit

var JSON = {}; 
+0

Si vous passez le test, alors vous écraserez toujours ce qu'il contient. Ce n'est généralement pas une bonne chose dans tous les cas où quelqu'un a pris la peine de vérifier si la variable a une valeur réelle. – Quentin

+0

@Quentin qui s'applique uniquement s'il y a plus de code avant l'ensemble, ce qui n'est pas le cas. – Andrew

+0

- Je pense que supposer que le code dans la question représente le programme complet est probablement dangereux. – Quentin

0

Ce code fait ce qui suit:

  1. Déclarez variables JSON (JSON === undefined)
  2. Attribuer un objet vide ({}) à JSON si JSON est une valeur falsey.

valeurs Falsey comprennent: null, undefined, "" (chaîne vide), 0, NaN, false.

JSON a été déclarée par var JSON, donc est réglé sur undefined, ce qui signifie que la main droite de l'opération JSON||...sera exécuté. En d'autres termes, tout le code atteint est:

var JSON = {}; 
+1

Il étend la variable. Il pourrait avoir une valeur d'ailleurs. – Quentin

+0

@Quentin, Exactement - la valeur doit être 'undefined' car la variable est déclarée via' var JSON'. S'il avait une autre valeur avant cette déclaration, cela n'aura aucune importance puisque 'JSON || ..' est exécuté après cela. – James

+0

- Non, 'var' est hébergé et ne réinitialise pas une variable avec une valeur définie précédemment dans la portée. J'ai vu: 'function (foo) {var foo ...}' un certain nombre de fois. Le 'var' est redondant parce que les arguments sont localement étendus automatiquement. – Quentin