recherche

Maison  >  Questions et réponses  >  le corps du texte

À propos du jugement de == en javascript

0 == "" // vrai

Le code ci-dessus est-il causé par une conversion implicite ou parce que 0 est égal à faux et "" est également égal à faux, donc ils sont égaux, mais je pense que la possibilité de conversion implicite est élevée, car l'utilisation du signe === ne se produira pas . question.

Ma question est la suivante, c'est le cas

0 == 0

toujours

faux == faux

黄舟黄舟2809 Il y a quelques jours682

répondre à tous(6)je répondrai

  • 黄舟

    黄舟2017-05-19 10:31:55

    Permettez-moi de vous dire clairement que personne ici n'est plus familier que moi avec la conversion implicite.

    Regardez d'abord les règles de conversion == dans la spécification ECMAScript :

    le type de 0 à gauche est le type de nombre

    le type de "" à droite est le type de chaîne

    Selon les règles correspondantes, si les 4 règles inférieures sont respectées, la comparaison sera effectuée à ce moment x==ToNumber(y) à ce moment 0==ToNumber("")

    Jetons un coup d'œil aux règles correspondantes d'ECMAScript pour ToNumber() :

    Alors regardez ci-dessous :

    Avez-vous vu que le ToNumber final ("") sera converti en +0

    Au final, c'est devenu 0==+0. Vous avez dit que vous ne pouviez pas attendre ? N'oubliez pas que les conversions implicites finissent par être une comparaison de deux nombres.

    Les règles spécifiques correspondantes peuvent être décrites dans cette image :

    Bien sûr, ce sont les plus simples. Vous pouvez essayer celles-ci :

    .
    []==![]
    ++[[]][+[]]+[+[]]==10
    console.log(([][[]]+[])[+!![]]+([]+{})[!+[]+!![]])

    D'accord, si vous ne comprenez pas ce qui précède, vous pouvez lire les deux articles que j'ai écrits. Il faut du temps pour étudier pour comprendre.

    De []==![] à true pour analyser diverses conversions de types douloureuses en JavaScript

    De +[[]][+[]]+[+[]]==10 ? Une explication approfondie de la conversion implicite de JS faiblement typé

    Après avoir compris ce qui précède, vous pouvez les utiliser pour vous entraîner :

    1.{}+{}
    
    2.{}+[]
    
    3.[]+{}
    
    4.{}+1
    
    5.({}+1)
    
    6.1+{}
    
    7.[]+1
    
    8.1+[]
    
    9.1-[]
    
    10.1-{}
    
    11.1-!{}
    
    12.1+!{}
    
    13.1+"2"+"2"
    
    14.1+ +"2"+"2"
    
    15.1++"2"+"2"
    
    16.[]==![]
    
    17.[]===![]

    répondre
    0
  • 怪我咯

    怪我咯2017-05-19 10:31:55

    Une sorte de

    0等于false也是隐式类型转换.

    répondre
    0
  • 大家讲道理

    大家讲道理2017-05-19 10:31:55

    Les conversions sont toutes fausses.

    !!0
    !!""
    

    Bien sûr, la comparaison spécifique dépend des règles

    répondre
    0
  • 怪我咯

    怪我咯2017-05-19 10:31:55

    0 sera implicitement converti en false et une erreur sera signalée en mode strict. Il est recommandé d'utiliser === pour comparaison

    .

    répondre
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-19 10:31:55

    JS a des règles pour la comparaison "==", qui correspondent spécifiquement à votre situation : si une valeur est un nombre et l'autre est une chaîne, convertissez d'abord la chaîne en nombre, puis utilisez la valeur convertie. Faites une comparaison.
    Ainsi, la chaîne vide "" à droite du signe égal sera convertie en chiffre 0, et la gauche et la droite sont équivalentes. Il y a une introduction détaillée aux règles de conversion de comparaison == sur le guide faisant autorité js

    répondre
    0
  • 怪我咯

    怪我咯2017-05-19 10:31:55

    0 == "" // vrai

    Cette phrase équivaut à 0 == Number("")

    Pour les comparaisons entre les trois types de nombres, chaînes et types booléens, ils sont d'abord convertis en nombres puis comparés.

    répondre
    0
  • Annulerrépondre