web-dev-qa-db-fra.com

Javascript: Comparé à null -! == vs! =

Ok, j'ai donc installé Linter sur mon éditeur Sublime tout en travaillant sur mon application node.js. L'une des choses qu'il a détectées est que je devrais toujours utiliser! == pour comparer un objet à null (j'utilise habituellement! =).

Je l'ai donc changé ... mais j'ai remarqué que le! == ne fonctionnait pas.

J'ai ce scénario:

var x = null;
if (x !== null)
    console.log('x is not equal to null');

Lorsque j'utilise le! == la console a imprimé cette ligne même si ce n'était évidemment pas vrai. Quand je l'ai remis à! = Il s'est comporté normalement.

Donc ma question est, pourquoi est-ce que linter me dit d'utiliser! == s'il ne fait pas ce que je veux ...

Je sais que je manque quelque chose.


[~ # ~] mise à jour [~ # ~] D'accord, cela peut donc être un peu plus compliqué que je ne le pensais à l'origine. Dans mon vrai code, j'utilisais! == avec l'objet GLOBAL node.js.

console.log('Global User: ' + GLOBAL.User);

if (GLOBAL.User != null)
{
    console.log('User is not null');
}

La ligne de console s'imprime même lorsque GLOBAL.User est nul ...

Peut-être que cet objet est spécial?



Mise à jour 2

Ok, donc après avoir lu les commentaires et regardé mon code, j'ai appris que! == peut avoir des problèmes si l'objet n'est pas défini plutôt que null (voir cet article: Pourquoi null est-il un objet et quelle est la différence entre null et indéfini? ).

Donc dans mon cas, ma variable globale pourrait être, selon le moment où cette méthode est appelée, non définie, nulle ou pleine de données. Je vais revenir en arrière et mettre à jour mon code afin qu'il ne soit jamais indéfini et alors! == fonctionnera de manière cohérente.

Merci pour l'aide!


Merci, David

26
David

Votre global.User est undefined, pas null. Lors de l'utilisation de == ils sont égaux, mais avec === les éléments que vous comparez doivent être du même type. undefined a le type undefined et null a le type object.

undefined et null sont très similaires, mais ils signifient généralement deux choses très différentes. Habituellement, undefined est le résultat lorsque quelque chose n'a pas de valeur qui lui est affectée, tandis que null a une valeur, et la valeur est explicitement définie sur "rien".

33
loganfsmyth

La seule valeur qui ne s'égale pas en JavaScript est NaN. Si null === null est false, alors votre moteur JavaScript a de sérieux problèmes;)

Pour vous assurer que votre instruction conditionnelle est bien écrite, utilisez toujours les accolades.

var x = null;
if (x !== null) {
    console.log('x is not equal to null');
}
12
plalx

C'est encore plus simple

var x = null;
    if (x) 6 
    if (!x) 7

le résultat est

undefined
7
4
oshribr