Qual è il modo corretto per verificare la parità tra le stringhe in JavaScript?
{} == "[object Object]"
true, ad esempio.
String().equals()
non sia un metodo in JS ...
Qual è il modo corretto per verificare la parità tra le stringhe in JavaScript?
{} == "[object Object]"
true, ad esempio.
String().equals()
non sia un metodo in JS ...
Risposte:
sempre Fino a quando non comprendi appieno le differenze e le implicazioni dell'uso deglioperatori==
e===
, usa l'===
operatore poiché ti salverà da bug e WTF oscuri (non ovvi). L'==
operatore"normale"può avere risultati molto inaspettati a causa della coercizione del tipo internamente, quindi l'utilizzo===
è sempre l'approccio raccomandato.
Per avere un'idea di ciò, e altre parti "buone contro cattive" di Javascript hanno letto il signor Douglas Crockford e il suo lavoro. C'è un ottimo discorso tecnico su Google in cui riassume molte buone informazioni: http://www.youtube.com/watch?v=hQVTIJBZook
Aggiornare:
La serie You Don't Know JS di Kyle Simpson è eccellente (e gratuita da leggere online). La serie va nelle aree del linguaggio comunemente fraintese e spiega le "parti cattive" che Crockford suggerisce di evitare. Comprendendoli puoi usarli correttamente ed evitare le insidie.
Il libro " Up & Going " include una sezione sull'uguaglianza , con questo riepilogo specifico di quando utilizzare gli operatori loose ( ==
) vs strict ( ===
):
Per ridurre tutti i dettagli in pochi semplici passaggi e aiutarti a sapere se utilizzare
==
o===
in varie situazioni, ecco le mie semplici regole:
- Se uno dei due valori (alias lato) in un confronto potrebbe essere il valore
true
ofalse
, evitare==
e utilizzare===
.- Se entrambi i valori in un confronto potrebbe essere di questi valori specifici (
0
,""
o[]
- array vuoto), evitare==
di usare===
.- In tutti gli altri casi, sei sicuro da usare
==
. Non solo è sicuro, ma in molti casi semplifica il codice in modo da migliorare la leggibilità.
Consiglio ancora il discorso di Crockford per gli sviluppatori che non vogliono investire il tempo per capire davvero Javascript: è un buon consiglio per uno sviluppatore che lavora solo occasionalmente in Javascript.
if (typeof foo == "string")
===
operatore e non doversi mai preoccupare del "Sono davvero, totalmente, sicuro al 100% che ==
si comporterà come penso?"
++
/ --
).
++
o --
o if/else
dichiarazioni a riga singola o continue
o l' new
operatore o qualsiasi altro numero di pratiche di codice perfettamente legittime che Crockford ha ritenuto "dannose". E ovviamente mai e poi mai nemmeno pensare di usare eval
o with
anche se le loro insidie sono ben comprese. E hai visto la prossima versione di JS? Sintassi più rigorosa e una manciata di funzioni di supporto, alcune delle quali fluttuano da anni, è tutto ciò che otteniamo dopo tutto questo tempo. La sintassi non si è affatto evoluta. Se Crockford è dietro questo, allora è stata una brutta cosa.
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()
tornerà vero
new String("a") == "a"
è vero (ma non lo sarebbe ===
), perché il lato sinistro verrà convertito in un valore di stringa primitivo.
new String("a") == new String("a")
, new String("a") === new String("b")
, new String("a") === new String("a")
tutti ritorneretefalse
, dal momento che hai a che fare con i riferimenti a oggetti della String
classe, non primitive di tipo string
.
new String(foo)
crea una stringa oggetto e String(foo)
converte foo in una primitiva stringa.
Solo un'aggiunta alle risposte: se tutti questi metodi restituiscono false, anche se le stringhe sembrano uguali, è possibile che ci sia uno spazio bianco a sinistra o a destra di una stringa. Quindi, basta inserire un .trim()
alla fine delle stringhe prima di confrontare:
if(s1.trim() === s2.trim())
{
// your code
}
Ho perso ore a cercare di capire cosa c'è che non va. Spero che questo possa aiutare qualcuno!
fetch
). Molte grazie.
ciò che mi ha portato a questa domanda è il padding
ewhite-spaces
controlla il mio caso
if (title === "LastName")
doSomething();
e il titolo era " LastName"
quindi forse devi usare la
trim
funzione in questo modo
var title = $(this).text().trim();
.toString().trim()
in Typescript
A meno che tu non sappia davvero come funziona la coercizione, dovresti invece evitare ==
e utilizzare l'operatore di identità ===
. Ma dovresti leggere questo per capire come funziona .
Se lo usi ==
, lasci che la lingua faccia qualche tipo di coercizione per te, quindi ad esempio:
"1" == 1 // true
"0" == false // true
[] == false // true
Come ha detto Douglas Crockford nel suo libro:
È sempre meglio usare l'operatore di identità.
{}==" "
mi hai dato Unexpected token ==
qual è il modo corretto di farlo?
Esistono due modi in cui è possibile creare stringhe in javascript.
var str = 'Javascript';
Questo crea un valore di stringa primitivo.
var obj = new String('Javascript');
Questo crea un oggetto wrapper di tipo String
.
typeof str // string
typeof obj // object
Quindi il modo migliore per verificare l'uguaglianza è usare il ===
operatore perché controlla sia il valore che il tipo di entrambi gli operandi.
Se si desidera verificare l'uguaglianza tra due oggetti, l'utilizzo String.prototype.valueOf
è corretto.
new String('javascript').valueOf() == new String('javascript').valueOf()
La stringa Objects
può essere controllata usando il JSON.stringyfy()
trucco.
var me = new String("me");
var you = new String("me");
var isEquel = JSON.stringify(me) === JSON.stringify(you);
console.log(isEquel);
Il modo più semplice per farlo è usare un operatore ternario in questo modo:
"was" == "was" ? true : false
ma se la stringa che desideri confrontare si trova in un array, utilizzerai il filtro es6
let stringArray = ["men", "boys", "girls", "sit", "can", "gotten"]
stringArray.filter(I=> I === boys ?
stringArray.pop(indexOf(I)) : null)
quanto sopra controllerà il tuo stringArray e qualunque stringa che lo corrisponda dall'array che nel nostro caso abbiamo scelto "ragazzi"
Ho trovato una soluzione alternativa durante i test. è possibile utilizzare la funzione sul prototipo di stringa.
String.prototype.betwenStr = function(one){
return JSON.stringify(new String(this)) === JSON.stringify(new String(one));
}
//call it
"hello world".betweenStr("hello world"); //returns boolean
//value
funziona bene nei browser Chrome
==
.