175 votes

Pourquoi `null >= 0 && null <= 0` mais pas `null == 0`?

J'ai dû écrire une routine qui s'incrémente la valeur d'une variable par 1 si son type est - number et affecte 0 à la variable si non, où la variable est initialement null ou undefined.

La première mise en œuvre a été v >= 0 ? v += 1 : v = 0 parce que je pensais que ce qui n'est pas un nombre ferait une expression arithmétique faux, mais c'était faux puisque null >= 0 est évaluée à vrai. Ensuite, j'ai appris null se comporte comme 0 et les expressions suivantes sont toutes évaluées à true.

  • null >= 0 && null <= 0
  • !(null < 0 || null > 0)
  • null + 1 === 1
  • 1 / null === Infinity
  • Math.pow(42, null) === 1

Bien sûr, null n'est pas 0. null == 0 est évaluée à false. Cela rend l'apparence tautologique expression (v >= 0 && v <= 0) === (v == 0) faux.

Pourquoi est - null 0, bien qu'il n'est pas fait 0?

246voto

CMS Points 315406

Votre question semble être:

Pourquoi:

null >= 0; // true

Mais:

null == 0; // false

Ce qui se passe réellement est que le Plus-que-ou-Opérateur égal (>=), effectue de contrainte de type (ToPrimitive), avec un indicateur de type d' Number, en fait, tous les opérateurs relationnels ont ce comportement.

Vous pouvez voir les détails intérieurs de ce processus dans la Le Résumé Relationnelle de l'Algorithme de Comparaison.

Edit: En réponse à votre commentaire:

C'est parce qu' null est traité d'une manière spéciale par l' Opérateur = (==).

En bref, il ne contraint d' undefined:

null == null; // true
null == undefined; // true

Toutes les autres valeurs que vous mentionnez sont l'objet de type numérique, de coercition, de tous les contraindre à zéro.

Vous pouvez voir les détails intérieurs de ce processus dans la Le Résumé de l'Égalité de l'Algorithme de Comparaison.

5voto

Salil Points 20300

null signifie qu'il n'valeurs whreas 0 est la valeur elle-même.

3voto

Sarfraz Points 168484

null signifie littéralement rien, la variable n'a pas de valeur à tous où que 0 est un nombre, c'est une valeur contrairement à null. Maintenant, parce qu'ils ne sont pas les mêmes, null == 0 doit être fausse naturellement.

null            ==             0  // false
 ^                             ^
nothing/no value        a number/a value

1voto

Weston C Points 2482

alert(typeof null)

-1voto

nico Points 21115

Deux façons de vérifier si une valeur est 0 ou null sont:

1) L'évidence if (val==null || val==0)

2) La plus concise if (!val)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X