Question

Je comprends que l’utilisation du " === " compare le type, donc exécuter le code suivant a pour résultat "différent de &"; parce qu'il compare un type de nombre à un type de chaîne.

var a = 20;
var b = "20";
    if (a === b) {
        alert("They are equal");
    } else {
        alert("They are not equal");
}

Mais je ne comprends pas comment utiliser le " == " pour comparer uniquement les résultats de valeur dans le champ "Ils sont égaux". message.

var a = 20;
var b = "20";
    if (a == b) {
        alert("They are equal");
    } else {
        alert("They are not equal");
}

Comment les valeurs sont-elles égales? La chaîne " 20 " stockés en tant que caractères ASCII 50 et 48 (0110010 et 0110000 en binaire) et 20 stockés en tant que nombre binaire réel 0010100?

EDIT: Merci à tous! Je pense que toutes les réponses sont excellentes et m’ont aidé à comprendre cela beaucoup mieux.

Était-ce utile?

La solution

L'opérateur == compare uniquement les valeurs des variables. Si les types sont différents, une conversion est effectuée. Ainsi, le nombre 20 est converti en chaîne "20". et le résultat est comparé.

L'opérateur === compare non seulement les valeurs, mais également les types, de sorte qu'aucun transtypage n'est effectué. Dans ce cas, " 20 ". ! == 20

Autres conseils

Lorsque la conversion de type est nécessaire, JavaScript convertit les opérandes String, Number, Boolean ou Object comme suit.

  • Lors de la comparaison d'un nombre et d'une chaîne, la chaîne est convertie en une valeur numérique. JavaScript tente de convertir le littéral numérique chaîne en une valeur de type Number. Premièrement, une valeur mathématique est dérivée du littéral numérique de chaîne. Ensuite, cette valeur est arrondie à la valeur de type Number la plus proche.
  • Si l'un des opérandes est booléen, l'opérande booléen est converti en 1 s'il est vrai et +0 s'il est faux.
  • Si un objet est comparé à un nombre ou à une chaîne, JavaScript tente de renvoyer la valeur par défaut de l'objet. Les opérateurs tentent de convertir l'objet en une valeur primitive, une valeur String ou Number, à l'aide des méthodes valueOf et toString des objets. Si cette tentative de conversion de l'objet échoue, une erreur d'exécution est générée.

Le problème avec la comparaison == est que la version 1.2 de JavaScript n'effectue pas la conversion de type, contrairement aux versions 1.1 et 1.3.

La comparaison === est disponible depuis la version 1.3 et constitue le meilleur moyen de vérifier la correspondance de deux variables.

Si vous souhaitez que votre code soit compatible avec les versions JavaScript, versions 1.1, 1.2 et 1.3, vous devez vous assurer que les variables correspondent toutes comme s'il s'agissait d'une comparaison === exécutée.

Le moteur JavaScript considère le a comme un nombre et le convertit avant la valorisation.

Partie de la définition de " == " est que les valeurs seront converties dans les mêmes types avant la comparaison, lorsque cela est possible. C’est le cas de nombreux langages mal définis.

Javascript est conçu de manière à ce qu'une chaîne contenant des nombres soit considérée comme "égale". à ce nombre. La raison en est la simplicité d'utilisation dans le cas où les utilisateurs entrent un nombre dans un champ de saisie et que le site le valide dans JS - vous n'avez pas à convertir la chaîne entrée en un nombre avant de comparer.

Cela simplifie un cas d'utilisation courant et l'opérateur === vous permet également de comparer également le type considéré.

Autant que je sache, JavaScript effectue la conversion automatique des types de données à la volée. Par conséquent, les variables sont converties automatiquement en types équivalents.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top