Qual é a maneira correta de verificar a igualdade entre Strings em JavaScript?
javascript
string
JSS
fonte
fonte
{} == "[object Object]"
avalia como verdadeiro, por exemplo.String().equals()
não é um método em JS ...Respostas:
sempreAté você entender completamente as diferenças e implicações do uso dosoperadores==
e===
, use o===
operador, pois ele evitará erros e WTFs obscuros (não óbvios). O==
operador"regular"pode ter resultados muito inesperados devido à coerção do tipo internamente, portanto, o uso===
é sempre a abordagem recomendada.Para ter uma idéia disso, e outras partes "boas versus más" do Javascript, leia sobre Douglas Crockford e seu trabalho. Há um ótimo Google Tech Talk, onde ele resume muitas informações boas: http://www.youtube.com/watch?v=hQVTIJBZook
Atualizar:
A série Você Não Sabe JS , de Kyle Simpson, é excelente (e é gratuita para leitura on-line). A série aborda as áreas geralmente incompreendidas da linguagem e explica as "partes ruins" que Crockford sugere que você evite. Ao entendê-los, você pode fazer uso adequado deles e evitar as armadilhas.
O livro " Up & Going " inclui uma seção sobre Igualdade , com este resumo específico de quando usar os operadores loose (
==
) vs strict (===
):Eu ainda recomendo a palestra de Crockford para desenvolvedores que não querem investir tempo para realmente entender o Javascript - é um bom conselho para um desenvolvedor que ocasionalmente trabalha em Javascript.
fonte
if (typeof foo == "string")
===
operador e nunca ter que se preocupar com o "estou realmente, totalmente, 100% certo de que==
se comportará como eu acho?"++
/--
).++
ou declarações de--
linha únicaif/else
oucontinue
ou onew
operador ou qualquer outro número de práticas de código perfeitamente legítimas que Crockford considerou "prejudiciais". E, naturalmente, nunca jamais sequer considerar pensando em usareval
ouwith
mesmo se suas armadilhas são bem compreendidos. E você viu a próxima versão do JS? Sintaxe mais rigorosa e algumas funções auxiliares, algumas que flutuam há anos, são tudo o que temos depois de todo esse tempo. A sintaxe ainda não evoluiu. Se Crockford está por trás disso, tem sido uma coisa ruim.Se você sabe que são strings, não há necessidade de verificar o tipo.
No entanto, observe que os objetos de sequência não serão iguais.
retornará falso.
Chame o método valueOf () para convertê-lo em uma primitiva para objetos String,
retornará verdadeiro
fonte
new String("a") == "a"
é verdade (mas não seria===
), porque o lado esquerdo será convertido em um valor primitivo de string.new String("a") == new String("a")
,new String("a") === new String("b")
,new String("a") === new String("a")
vai todo o retornofalse
, desde que você está lidando com referências a objetos daString
classe, não primitivos do tipostring
.new String(foo)
cria um objeto de string eString(foo)
converte foo em um primitivo de string.Apenas uma adição às respostas: se todos esses métodos retornarem falsos, mesmo que as strings pareçam iguais, é possível que exista um espaço em branco à esquerda e ou à direita de uma string. Então, basta colocar um
.trim()
no final das strings antes de comparar:Perdi horas tentando descobrir o que está errado. Espero que isso ajude alguém!
fonte
fetch
). Muito obrigado.o que me levou a essa pergunta é
padding
aewhite-spaces
verifique meu caso
e o título era
" LastName"
fonte
.toString().trim()
à máquinaA menos que você realmente saiba como a coerção funciona, evite
==
e use o operador de identidade===
. Mas você deve ler isso para entender como funciona .Se você usar
==
, deixe o idioma fazer algum tipo de coerção para você, por exemplo:Como Douglas Crockford disse em seu livro:
fonte
{}==" "
me deuUnexpected token ==
qual é a maneira correta de fazer isso?Na verdade, existem duas maneiras pelas quais as strings podem ser criadas em javascript.
var str = 'Javascript';
Isso cria um valor de cadeia primitiva.var obj = new String('Javascript');
Isso cria um objeto do tipo wrapperString
.typeof str // string
typeof obj // object
Portanto, a melhor maneira de verificar a igualdade é usar o
===
operador, pois ele verifica o valor e o tipo dos dois operandos.Se você deseja verificar a igualdade entre dois objetos, usar
String.prototype.valueOf
é o caminho correto.fonte
A sequência
Objects
pode ser verificada usando oJSON.stringyfy()
truque.fonte
Considerando que ambas as cadeias podem ser muito grandes, existem 2 abordagens principais
bitwise search
elocaleCompare
Eu recomendei esta função
fonte
A maneira mais fácil de fazer isso é usar um operador ternário da seguinte forma:
mas se a string que você deseja comparar estiver em uma matriz, você usará o filtro es6
o acima irá verificar seu stringArray e qualquer string que corresponda a ela da matriz que, no nosso caso, escolhemos "boys"
fonte
Eu vim com uma solução alternativa durante o teste. você pode usar a função no protótipo de string.
funciona bem em navegadores Chrome
fonte
==
.