Si a
est définie, cela fonctionne:Quelle est la différence entre undefined et window.undefined dans JavaScript?
if(window.a) {}
alors que cela jette une erreur:
if(a)
Quelqu'un peut-il expliquer pourquoi?
Si a
est définie, cela fonctionne:Quelle est la différence entre undefined et window.undefined dans JavaScript?
if(window.a) {}
alors que cela jette une erreur:
if(a)
Quelqu'un peut-il expliquer pourquoi?
window.a
est une propriété de window
et c'est undefined. a
est une variable, et non déclaré.
Pour utiliser une variable, vous devez d'abord la déclarer à l'aide de l'instruction var
. Puisque vous n'avez pas déclaré a
, l'interpréteur déclenche une erreur. Les propriétés d'objet n'ont pas besoin d'être explicitement déclarées pour pouvoir les utiliser. Crockford écrit dans The Good Parts:
If you attempt to extract a value from an object, and if the object does not have a member with that name, it returns the undefined value instead.
Cependant: "window.a = 2; a" - No 'var' est nécessaire. Il arrive juste que l'exception soit levée quand une recherche d'identifiant "non-préfixée" court à partir des portées chaînées pour regarder dedans. Le dernier contexte vérifié est le contexte global (ou 'fenêtre'). Dans la plupart des cas, 'var x' dans le contexte global est identique à 'window.x = undefined'. Voir http://jibbering.com/faq/faq_notes/closures.html et regardez "Résolution d'identifiant, Contextes d'exécution et Chaînes d'étendue". –
@pst: c'est un cas particulier dans les navigateurs que toutes les variables globales sont la propriété de 'window'. C'est un problème indépendant de JavaScript. Si vous exécutez 'window.a = 2; a' dans Rhino qui est un environnement non-navigateur, vous obtenez toujours l'erreur de référence. –
@pst: de toute façon, merci pour votre supplément dans la clarification de la réponse. –
s'il vous plaît expliquer en détail. – Salil