web-dev-qa-db-fra.com

Pourquoi (null == false) et (null == true) renvoient-ils tous deux false?

Je sais que null est un objet sans attributs ni fonctions.

Cependant, je suis confus quant à la raison pour laquelle console.log(null == false); et console.log(null == true); renvoient false.

Quelles sont les règles de conversion entre null et boolean?

33
iatboy

Cela est dû au fait que l'algorithme de comparaison d'égalité abstraite exige que si Type(x) ou Type(y) soit un booléen dans l'expression x == y, la valeur booléenne doit alors être contrainte à un nombre via ToNumber , qui convertit true en 1 et false en +0.

Cela signifie que toute comparaison de true == something ou something == true aboutit à 1 == something ou something == 1 (en remplaçant true et 1 par false et +0 pour false).

Le type Null ne se compare pas comme étant égal à 1 ou à +0 (en fait, null est uniquement comparable à undefined dans la loi AECA).

Il existe une discussion détaillée sur les différents types d’égalité en JavaScript sur MDN qui mérite d’être examinée si vous souhaitez en savoir plus.

Cependant, si vous contraignez null à un nombre, il est contraint à +0 afin que +null == false renvoie réellement true.

44
Sean Vieira

Réponse: Il n'y a pas d'aspect relatif entre null et boolean.

Source MDN: -

La valeur null est un littéral (et non une propriété de l'objet global comme Undefined peut l'être). Dans les API, la valeur null est souvent extraite à la place d'un objet peut être attendu mais aucun objet n'est pertinent. Lors de la vérification de null ou indéfini méfiez-vous des différences entre égalité (==) et Identité (===) opérateurs (la conversion de type est effectuée avec le former).

// foo does not exist, it is not defined and has never been initialized:
> foo
"ReferenceError: foo is not defined"

// foo is known to exist now but it has no type or value:
> var foo = null; foo
"null"

Différence entre null et indéfini

typeof null        // object (bug in ECMAScript, should be null)
typeof undefined   // undefined
null === undefined // false
null  == undefined // true

Javascirpt | MDN

2
Gayan C Liyanage

La valeur null est un littéral JavaScript représentant une valeur "vide" ou "indéfinie". null est l'une des valeurs primitives de JavaScript. Il n'est ni égal à booléen true ni égal à booléen false car sa valeur est indéfinie. La valeur de null est plus encline à false même si ce n'est pas false. C'est pourquoi on l'appelle "opérateurs falsey" et un bloc if (var) { } n'est pas exécuté lorsque var est null.

1
Diptendu

Ajout à la discussion en cours. null> = false renvoie true.

Je crois que c’est parce que cela est interprété comme! (Null <false)