Domanda

Comprendo che l'utilizzo di " === " confronta il tipo, quindi l'esecuzione del codice seguente comporta "non uguale" perché sta confrontando un tipo di numero con un tipo di stringa.

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

Ma non capisco come usare " == " per confrontare solo i risultati del valore in " Sono uguali " messaggio.

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

Come sono uguali i valori? La stringa non è " 20 " memorizzati come caratteri ASCII 50 e 48 (0110010 e 0110000 in binario) e 20 memorizzati come numero binario effettivo 0010100?

EDIT: grazie a tutti! Penso che tutte le risposte siano fantastiche e mi hanno aiutato a capirlo molto meglio.

È stato utile?

Soluzione

L'operatore == confronta solo i valori delle variabili. Se i tipi sono diversi, viene eseguita una conversione. Quindi il numero 20 viene convertito nella stringa "20" e il risultato viene confrontato.

L'operatore === confronta non solo i valori, ma anche i tipi, quindi non viene utilizzato alcun cast. In questo caso " 20 " ! == 20

Altri suggerimenti

Quando è necessaria la conversione del tipo, JavaScript converte gli operandi String, Number, Boolean o Object come segue.

  • Quando si confrontano un numero e una stringa, la stringa viene convertita in un valore numerico. JavaScript tenta di convertire la stringa numerica letterale in un valore di tipo Numero. Innanzitutto, un valore matematico è derivato dalla stringa numerica letterale. Successivamente, questo valore viene arrotondato al valore del tipo Numero più vicino.
  • Se uno degli operandi è booleano, l'operando booleano viene convertito in 1 se è vero e +0 se è falso.
  • Se un oggetto viene confrontato con un numero o una stringa, JavaScript tenta di restituire il valore predefinito per l'oggetto. Gli operatori tentano di convertire l'oggetto in un valore primitivo, un valore String o Number, utilizzando i metodi valueOf e toString degli oggetti. Se questo tentativo di convertire l'oggetto fallisce, viene generato un errore di runtime.

Il problema con il confronto == è che JavaScript versione 1.2 non esegue la conversione del tipo, mentre le versioni 1.1 e 1.3 in poi lo fanno.

Il confronto === è disponibile dalla versione 1.3 ed è il modo migliore per verificare la corrispondenza di due variabili.

Se è necessario che il codice sia compatibile con le versioni 1.1, 1.2 e 1.3 del codice JavaScript, è necessario assicurarsi che tutte le variabili corrispondano come se si stesse eseguendo un confronto ===.

Il motore JavaScript vede la a come un numero e lancia la b come numero prima della valutazione.

Parte della definizione di " == " è che i valori verranno convertiti negli stessi tipi prima del confronto, quando possibile. Questo è vero per molte lingue tipicamente vaghe.

Javascript è progettato in modo tale che una stringa contenente numeri sia considerata "uguale". a quel numero. Il motivo è la semplicità d'uso nel caso in cui gli utenti inseriscano un numero in un campo di input e il sito lo convalida in JS: non è necessario eseguire il cast della stringa immessa in un numero prima del confronto.

Semplifica un caso d'uso comune e l'operatore === consente comunque di confrontare anche con il tipo considerato.

Per quanto ne so JavaScript esegue la conversione automatica dei tipi di dati al volo, quindi forse le variabili vengono automaticamente convertite in tipi equivalenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top