Qual è il modo corretto di controllare l'uguaglianza delle stringhe in JavaScript?

Qual è il modo corretto di controllare l'uguaglianza tra stringhe in JavaScript?

Finché non avrete compreso appieno le differenze e le implicazioni dell'uso degli operatori == e ===, usate l'operatore === poiché vi salverà da oscuri (non ovvi) bug e WTF. L'operatore "regular" == può avere risultati molto inaspettati a causa del type-coercion interno, quindi usare === è sempre l'approccio raccomandato.

Per avere un'idea di questo, e di altre "parti buone vs. cattive" di Javascript leggete il signor Douglas Crockford e il suo lavoro. C'è un grande Google Tech Talk dove riassume un sacco di buone informazioni: [http://www.youtube.com/watch?v=hQVTIJBZook][1]


Aggiornamento:

La serie You Don't Know JS di Kyle Simpson è eccellente (e gratuita da leggere online). La serie approfondisce le aree comunemente fraintese del linguaggio e spiega le "cattive parti" che Crockford suggerisce di evitare. Comprendendole si può fare un uso corretto ed evitare le insidie.

Il libro "Up & Going" include una sezione su Equality, con questo specifico riassunto di quando usare gli operatori loose (==) vs strict (===):

Per ridurre un sacco di dettagli a pochi semplici punti di partenza, e aiutarvi a sapere se usare == o === in varie situazioni, ecco le mie semplici regole:

  • Se uno dei due valori (aka side) in un confronto potrebbe essere il valore vero o falso, evita == e usa ===.
  • Se uno dei due valori in un confronto potrebbe essere uno di questi valori specifici (0, "", o [] -- array vuoto), evita == e usa ===.
  • 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 il discorso di Crockford per gli sviluppatori che non vogliono investire il tempo per capire veramente Javascript—è un buon consiglio per uno sviluppatore che lavora solo occasionalmente in Javascript.

Commentari (13)

Se sai che sono stringhe, allora non c'è bisogno di controllare il tipo.

"a" == "b"

Tuttavia, notate che gli oggetti stringa non saranno uguali.

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

restituirà false.

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

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

restituirà true

Commentari (6)

Ci sono in realtà due modi in cui le stringhe possono essere fatte in javascript.

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

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

    typeof str // stringa. typeof obj // oggetto

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

Se volete controllare l'uguaglianza tra due oggetti, allora usare String.prototype.valueOf è il modo corretto.

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