Parce qu'avec window.foo
vous recherchez explicitement la propriété foo
de window
objet qui n'est pas le cas dans cette dernière option. Dans cette dernière option, si foo
n'est pas défini, vous devez être en mesure de savoir que le développeur n'est pas défini et obtenir l'avertissement d'erreur claire plutôt que l'interpréteur en le réglant sur undefined
seul (comme le premier cas) qui conduira inattendu résultats.
Reference Error:
Représente une erreur lorsqu'une variable inexistante est référencé. Une erreur ReferenceError est renvoyée lorsque vous essayez de déréférencer une variable qui n'a pas été déclarée.
Jetez un oeil à cet article pour plus d'informations:
Je cite ci-dessus article:
Une référence est considérée comme impossible à résoudre si sa valeur de base est indéfini. Par conséquent, une référence de propriété n'est pas résolue si la valeur avant le point est indéfinie. L'exemple suivant lancerait une erreur ReferenceError mais pas parce que TypeError y arrivera en premier. Cela est dû au fait que la valeur de base d'une propriété est soumise à CheckObjectCoercible (ECMA 5 9.10 via 11.2.1) qui lance une erreur TypeError lors de la tentative de conversion d'un type indéfini en objet.
Exemples:
var foo;
foo.bar; //TypeError (base value, foo, is undefined)
bar.baz; //ReferenceError (bar is unersolvable)
undefined.foo; //TypeError (base value is undefined)
Références qui ne sont ni propriétés ou variables sont, par définition, impossible à résoudre et jetteront un ReferenceError, donc:
foo; //ReferenceError
'window.foo' n'est pas équivalent à' var foo'. –
@TimDown. pouvez-vous élaborer un peu plus s'il vous plaît? peut-être dans une réponse? – gdoron
@TimDown & @ gdoron Bon, c'est un peu faux - ce que je voulais dire, c'est que window.foo est équivalent à 'var foo' lorsqu'il est déclaré dans le contexte global. – JKing