Qual è il modo corretto per verificare l’uguaglianza delle stringhe in JavaScript?

Qual è il modo corretto per verificare l’uguaglianza tra stringhe in JavaScript?

sempre Fino a quando non comprenderete appieno le differenze e le implicazioni derivanti dall’uso degli operatori == e === , usate l’operatore === poiché vi salverà da bug e WTF oscuri (non ovvi). L’operatore “regular” == può avere risultati molto inaspettati a causa della coercizione di tipo interna, quindi usare === è sempre l’approccio raccomandato.

Per avere un’idea di questo, e altre parti “buone o cattive” di Javascript leggere su Mr. Douglas Crockford e il suo lavoro. C’è un ottimo Google Tech Talk in cui riassume molte buone informazioni: http://www.youtube.com/watch?v=hQVTIJBZook


Aggiornare:

La serie You Do not Know di Kyle Simpson è eccellente (e gratuita da leggere online). La serie entra nelle aree comunemente incomprese della lingua e spiega le “parti cattive” che Crockford suggerisce di evitare. Comprendendoli puoi farne un uso corretto ed evitare le insidie.

Il libro ” Up & Going ” include una sezione su Equality , con questo riepilogo specifico su quando utilizzare gli operatori loose ( == ) vs strict ( === ):

Per riassumere un sacco di dettagli su alcuni semplici takeaway e aiutarti a sapere se usare == o === in varie situazioni, ecco le mie semplici regole:

  • Se un valore (aka lato) in un confronto potrebbe essere il valore true o false , evitare == e utilizzare === .
  • Se entrambi i valori in un confronto potrebbero essere di questi valori specifici ( 0 , "" o [] – array vuoto), evitare == e utilizzare === .
  • In tutti gli altri casi, sei sicuro di usare == . Non solo è sicuro, ma in molti casi semplifica il tuo codice in un modo che migliora la leggibilità.

Raccomando ancora i discorsi di Crockford per gli sviluppatori che non vogliono investire tempo per capire veramente Javascript – è un buon consiglio per uno sviluppatore che lavora solo occasionalmente in Javascript.

Se sai che sono stringhe, non è necessario controllare il tipo.

 "a" == "b" 

Tuttavia, si noti che gli oggetti stringa non saranno uguali.

 new String("a") == new String("a") 

restituirà false.

Chiama il metodo valueOf () per convertirlo in una primitiva per oggetti String,

 new String("a").valueOf() == new String("a").valueOf() 

ritornerà vero

Solo una aggiunta alle risposte: Se tutti questi metodi restituiscono false, anche se le stringhe sembrano essere uguali, è ansible che ci sia uno spazio bianco a sinistra ea destra di una stringa. Quindi, metti un .trim() alla fine delle stringhe prima di confrontare:

 if(s1.trim() === s2.trim()) { // your code } 

Ho perso ore cercando di capire cosa c’è che non va. Spero che questo possa aiutare qualcuno!

A meno che tu non sappia davvero come funziona la coercizione, dovresti evitare == e usare invece l’operatore di id quadro === . Ma dovresti leggere questo per capire come funziona .

Se usi == , lasci che la lingua faccia qualche tipo di coercizione per te, quindi per esempio:

 "1" == 1 // true "0" == false // true [] == false // true 

Come ha detto Douglas Crockford nel suo libro:

È sempre meglio usare l’operatore di id quadro.

Esistono due modi in cui è ansible creare stringhe in javascript.

  1. var str = 'Javascript'; Questo crea un valore stringa primitivo.

  2. var obj = new String('Javascript'); Questo crea un object wrapper di tipo String .

    typeof str // string
    typeof obj // object

Quindi il modo migliore per verificare l’uguaglianza è usare l’operatore === perché controlla sia il valore che il tipo di entrambi gli operandi.

Se si desidera verificare l’uguaglianza tra due oggetti, utilizzare String.prototype.valueOf è il modo corretto.

 new String('javascript').valueOf() == new String('javascript').valueOf() 

quello che mi ha portato a questa domanda è l’ padding e white-spaces

controlla il mio caso

  if (title === "this word") doSomething(); 

e il titolo era " this word"

inserisci la descrizione dell'immagine qui

quindi forse devi usare la funzione di trim come questa

 var title = $(this).text().trim(); 

String Objects possono essere controllati usando questo hack JSON.stringyfy()

 var me = new String("me"); var you = new String("me"); var isEquel = JSON.stringify(me) === JSON.stringify(you); console.log(isEquel);