Si j'ai une variable non déclarée et utilisez Je ne comprends pas ce comportement, car si le premier indique typeof code> il me dit que c'est
non défini code>.
Mais si je vérifie alors cela en utilisant
si (qweasdasd === non défini) code> il jette une exception. P>
non défini code>, alors la deuxième vérification doit être évaluée à
si (indéfini === non défini) code>, pourquoi Il jette une exception de référenceError? P>
6 Réponses :
essayer de lire la valeur d'une variable non déclarée (que vous devez faire avant de pouvoir comparer cette valeur à la valeur de Application du type non défini code>) jette une référence. p>
de type de code> à une variable non déclarée ne le fait pas. P>
Pourquoi typeof code> se comporte-t-il différemment de, par exemple, unary
code> (E.G.
+ foo -> boom! Code>)?
typeof code> ressemble à un appel de la fonction, mais ce n'est pas - c'est un opérateur. Les opérateurs sont autorisés à casser des règles.
typeof (qweasdasd) code> n'assume pas
qweasdasd code> existe; Que ce soit ou non et que c'est ce que c'est ce que
typeof code> existe à découvrir. Cependant, lorsque vous testez
qweasdasd === non définis code>, vous utilisez
qweasdasd code> comme valeur, et JS se plaint lorsque vous utilisez une variable que vous n'avez pas affecté une valeur à . p>
Mais n'est-ce pas un mensonge de dire que qweasdasd code> est un
non défini code>? Parce que dans mon esprit, le chèque
si code> est parfaitement valide et doit évaluer à
si (indéfini === non défini) code>.
JavaScript est un peu déroutant ici (et ce n'est pas le seul endroit; ne me fais pas commencer sur la folie de trier code>). Comme je l'ai dit, être indéfini et avoir la valeur
non définie code> est deux choses différentes, une situation malheureuse exacerbée par le fait que
typeof (qweasdasd) code> et
typeof (non défini) code> les deux produisent le même résultat.
Parfois, il vous suffit d'abandonner la compréhension de la logique de JavaScript.
Pourquoi typeof code> se comporte-t-il différemment de, par exemple, unary
+ code>?
La logique? C'était une langue créée en 10 jours, qui a atterri un monopole sur l'environnement du navigateur, qui s'est terminé de geler les modifications incompatibles. Je suis stupénée i> C'est une forme aussi bonne que c'est.
@Salmana: Comme je l'ai dit, les opérateurs peuvent i> rupture de règles. && code> et
|| code> rupture de rupture par paresseusement décidant ou non d'évaluer le deuxième argument;
typeof code> rompt les règles en ne priant pas si une variable a été définie ou non.
+ code> a été créé pour évaluer les deux arguments et également se soucier de la variable définie. Il ne casse pas de règles; Personne n'a déclaré que tous les opérateurs doivent être bizarres.
Vous avez une variable non définie, mais pas une valeur d'objet non définie.
essayer d'accéder à une variable non définie dans JavaScript donne RéférenceError code>.
typeof code> fonctionne car il n'accède pas à une valeur variable. Sa vérification de son type. P>
typeof code> est un opérateur qui vous renvoie une chaîne indiquant le type de l'opérande non évoluée. Peu importe que l'opérande inévalué soit indéfini ou non.
https://developer.mozilla.org/en-us / Docs / Web / JavaScript / Référence / Opérateurs / Typeof
typeof (parseint) code>:
"fonction" code>. Mais
typeof (typeof) code>:
syntaxError code>.
typeof code> est pas une fonction i>; Si cela était i> une fonction, il donnerait code> RéférenceError code> comme
parseint (qweasdasd) code> fait.
Je pense avoir une explication très simple pour cela - car les spécifications le disent: P>
typeof code> opérateur A> n'est pas censé lancer l'exception RéférenceError si la variable n'est pas définie li>
ul>
- Si le type ( val em>) est référence, puis
une. Si isunresolvableference ( val em>) est vrai fort>, retour "non défini" code>. Li>
ol>
blockQuote>
-
=== code> opérateur
est censé jeter l'exception de référenceError si l'opérande (s) se réfère à des variables non définies li>
ul>
- laissez lval em> être getvalue ( lref em>). li>
ol>
[et à l'intérieur de la définition de getvalue que nous avons] em> p>
- laisse base em> résulte de l'appel de getbase ( v em>). li>
- Si isunresolvablereference ( v em>), jette une exception forte> RéférenceError forte>. LI>
ol>
blockQuote>
Impossible de reproduire: jsfiddle.net/y1xhw9un
@Jamiec - peut reproduire: jsfiddle.net/y1xhw9un/1
@Quentin - ahh, c'est non déclaré i>, quand il est indéfini, il fonctionne, alors il fonctionne Jsfiddle. NET / Y1XHW9UN / 2
@Jamiec: Dans cet extrait, vous êtes défini sur cette extrémité
Y code> pour avoir une valeur
non définie code>. OP est posé sur un cas lorsque la variable est indéfinie, pas quand il a une valeur
non définie code>. "non déclaré" n'existe pas comme terme en JavaScript; Le message d'erreur est "RéférenceErrorror: ... n'est pas défini".
@AMADAN - Non, il apparaît (de l'échantillon de quentins) L'OP a une variable non déclarée - c'est très différent de non défini. Je pense que votre réponse est la bonne thogh -
typeof code> vous permet de "sortir avec elle" où la vérification de l'égalité n'est pas.