web-dev-qa-db-fra.com

Est-ce que true == 1 et false == en JavaScript?

Je lisais un bon livre sur JavaScript. 

Cela a commencé avec: 

Le type booléen n'accepte que deux valeurs littérales: true et false. Celles-ci sont distinctes des valeurs numériques, donc true n'est pas égal à 1 et false n'est pas égal à 0.

Cependant, j'ai observé ce qui suit:

if(1==true)
  document.write("oh!!! that's true");  //**this is displayed**

Je sais que chaque type en JavaScript a un équivalent booléen. 

Mais alors, quelle est la vérité? 

37
Mahesha999

Il est vrai que true et false ne représentent aucune valeur numérique en Javascript.

Dans certaines langues (par exemple, C, VB), les valeurs booléennes sont définies comme des valeurs numériques réelles. Il s’agit donc de noms différents pour 1 et 0 (ou -1 et 0).

Dans d'autres langages (par exemple, Pascal, C #), il existe un type booléen distinct qui n'est pas numérique. Il est possible de convertir des valeurs booléennes en valeurs numériques, mais cela ne se produit pas automatiquement.

Javascript tombe dans la catégorie qui a un type booléen distinct, mais d'un autre côté, Javascript est assez enclin à convertir des valeurs entre différents types de données.

Par exemple, même si un nombre n'est pas un booléen, vous pouvez utiliser une valeur numérique dans laquelle une valeur booléenne est attendue. Utiliser if (1) {...} fonctionne aussi bien que if (true) {...}.

Lorsque vous comparez des valeurs, comme dans votre exemple, il existe une différence entre l'opérateur == et l'opérateur ===. L'opérateur d'égalité == convertit avec bonheur les types pour trouver une correspondance. 1 == true est donc évalué à true car true est converti en 1. L'opérateur d'égalité de types === ne fait pas de conversions de types, donc 1 === true est évalué à false car les valeurs sont de types différents.

56
Guffa

En JavaScript, == se prononce "Probablement égal".

Ce que je veux dire par là, c'est que JavaScript convertira automatiquement le booléen en entier, puis tentera de comparer les deux côtés. 

Pour une égalité réelle, utilisez l'opérateur ===. 

42
Madara Uchiha

Essayez la comparaison d'égalité stricte:

if(1 === true)
    document.write("oh!!! that's true");  //**this is not displayed**

L'opérateur == effectue la conversion d'un type à un autre, contrairement à l'opérateur ===

12
Evandro Silva

Extrait de la spécification ECMAScript, Section 11.9.3 Algorithme de comparaison d'égalité abstraite:

La comparaison x == y, où x et y sont des valeurs, produit true ou faux. Une telle comparaison est effectuée comme suit:

  • Si Type (y) est booléen, renvoyez le résultat de la comparaison x == ToNumber (y).

Ainsi, dans, if (1 == true), true est contraint à une Number, c'est-à-dire Number(true), ce qui donne la valeur 1, ce qui donne la dernière if (1 == 1) qui est true.

if (0 == false) est exactement la même logique, puisque Number(false) == 0.

Cela ne se produit pas lorsque vous utilisez plutôt l'opérateur __===:

11.9.6 Algorithme de comparaison d'égalité stricte

La comparaison x === y, où x et y sont des valeurs, produit true ou faux. Une telle comparaison est effectuée comme suit:

  • Si Type (x) est différent de Type (y), retournez false.
8
João Silva

Ah, l'opérateur de comparaison lâche redouté frappe à nouveau. Ne l'utilisez jamais. Toujours utiliser la comparaison stricte, === ou! == à la place.

En bonus: 0 == ''

3
erikkallen

Quand comparer quelque chose avec Boolean cela fonctionne comme suit

Étape 1: Convertissez boolean en NumberNumber(true) // 1 et Number(false) // 0

Étape 2: Comparez les deux côtés

boolean == someting 
-> Number(boolean) === someting

Si vous comparez 1 et 2 à true, vous obtiendrez les résultats suivants

true == 1
-> Number(true) === 1
-> 1 === 1
-> true

Et 

true == 2
-> Number(true) === 1
-> 1 === 2
-> false
1
webHasan

En réalité, chaque objet javascript est résolu comme étant vrai s'il a "une valeur réelle" comme le dit W3Cschools. Cela signifie tout sauf "", NaN, undefined, null ou 0.

Tester un nombre contre un booléen avec l'opérateur == est en effet un peu bizarre, car le booléen est converti en 1 avant la comparaison, ce qui défie un peu la logique qui sous-tend la définition . comme ça:

    var fred = !!3; // will set fred to true 
    var joe = !!0; // will set joe to false
    alert("fred = "+ fred + ", joe = "+ joe);

tout n'est pas logique en javascript;)

1
Stefan Nolde

Utilisez === pour assimiler les variables au lieu de ==.

== vérifie si la valeur des variables est similaire

=== vérifie si la valeur des variables et le type des variables sont similaires

Remarquez comment 

if(0===false) {
    document.write("oh!!! that's true");
}​

et 

if(0==false) {
    document.write("oh!!! that's true");
}​

donner des résultats différents

0
jacktheripper

Well == est un opérateur de comparaison de blagues et en tant que développeurs js, nous ne devons pas utiliser == pour la comparaison. Toutes les questions de comparaison == ne sont pas valides pour commencer. 

0
afr0