¿Cuál es la forma correcta de verificar la igualdad entre cadenas en JavaScript?
javascript
string
JSS
fuente
fuente
{} == "[object Object]"
evalúa como verdadero, por ejemplo.String().equals()
no es un método en JS ...Respuestas:
siempreHasta que comprenda completamente las diferencias e implicaciones del uso de losoperadores==
y===
, use el===
operador ya que lo salvará de errores oscuros (no obvios) y WTF. El==
operador"regular"puede tener resultados muy inesperados debido a la coerción de tipo internamente, por lo que usar===
siempre es el enfoque recomendado.Para obtener información sobre esto y otras partes "buenas contra malas" de Javascript, lea sobre el Sr. Douglas Crockford y su trabajo. Hay una gran charla técnica de Google donde resume mucha buena información: http://www.youtube.com/watch?v=hQVTIJBZook
Actualizar:
La serie You Don't Know JS de Kyle Simpson es excelente (y gratuita para leer en línea). La serie aborda las áreas comúnmente incomprendidas del lenguaje y explica las "partes malas" que Crockford sugiere que evite. Al comprenderlos, puede hacer un uso adecuado de ellos y evitar las trampas.
El libro " Up & Going " incluye una sección sobre Igualdad , con este resumen específico de cuándo usar los operadores flojos (
==
) versus estrictos (===
):Todavía recomiendo la charla de Crockford para desarrolladores que no quieren invertir el tiempo para comprender realmente Javascript; es un buen consejo para un desarrollador que solo ocasionalmente trabaja en Javascript.
fuente
if (typeof foo == "string")
===
operador y nunca tener que preocuparte por el "¿estoy realmente, totalmente seguro al 100% de que==
se comportará como creo que lo hará?"++
/--
).++
o declaraciones de--
línea única o el operador o cualquier otro número de prácticas de código perfectamente legítimas que Crockford haya considerado "dañinas". Y por supuesto, nunca jamás considerar siquiera pensar en usar o incluso si sus trampas son bien comprendidos. ¿Y has visto la próxima versión de JS? La sintaxis más estricta y un puñado de funciones auxiliares, algunas de las cuales han estado flotando durante años, es todo lo que obtenemos después de todo este tiempo. La sintaxis no ha evolucionado en absoluto. Si Crockford está detrás de esto, entonces ha sido algo malo.if/else
continue
new
eval
with
Si sabe que son cadenas, no hay necesidad de verificar el tipo.
Sin embargo, tenga en cuenta que los objetos de cadena no serán iguales.
devolverá falso.
Llame al método valueOf () para convertirlo en una primitiva para objetos String,
volverá verdadero
fuente
new String("a") == "a"
es cierto (pero no lo sería===
), porque el lado izquierdo se convertirá en un valor de cadena primitivo.new String("a") == new String("a")
,new String("a") === new String("b")
,new String("a") === new String("a")
todos volveremosfalse
, ya que está tratando con referencias a los objetos de laString
clase, no primitivas de tipostring
.new String(foo)
crea un objeto de cadena yString(foo)
convierte foo en una cadena primitiva.Solo una adición a las respuestas: si todos estos métodos devuelven falso, incluso si las cadenas parecen ser iguales, es posible que haya un espacio en blanco a la izquierda o derecha de una cadena. Entonces, solo ponga un
.trim()
al final de las cadenas antes de comparar:He perdido horas tratando de descubrir qué está mal. Espero que esto ayude a alguien!
fuente
fetch
). Muchas gracias.lo que me llevó a esta pregunta es la
padding
ywhite-spaces
mira mi caso
y el título era
" LastName"
fuente
.toString().trim()
en elA menos que realmente sepa cómo funciona la coerción, debe evitar
==
y utilizar el operador de identidad en su===
lugar. Pero deberías leer esto para entender cómo funciona .Si lo usa
==
, deja que el idioma haga algún tipo de coerción por usted, por ejemplo:Como Douglas Crockford dijo en su libro:
fuente
{}==" "
me dioUnexpected token ==
cuál es la forma correcta de hacerlo?En realidad, hay dos formas en que las cadenas se pueden hacer en JavaScript.
var str = 'Javascript';
Esto crea un valor de cadena primitivo.var obj = new String('Javascript');
Esto crea un objeto contenedor de tipoString
.typeof str // string
typeof obj // object
Entonces, la mejor manera de verificar la igualdad es usar el
===
operador porque verifica el valor y el tipo de ambos operandos.Si desea verificar la igualdad entre dos objetos, entonces usar
String.prototype.valueOf
es la forma correcta.fuente
La cadena
Objects
se puede verificar con unJSON.stringyfy()
truco.fuente
Teniendo en cuenta que ambas cadenas pueden ser muy grandes, hay 2 enfoques principales
bitwise search
ylocaleCompare
Recomiendo esta función
fuente
La forma más fácil de hacerlo es usar un operador ternario como este:
pero si la cadena que desea comparar está en una matriz, usará el filtro es6
lo anterior verificará su stringArray y cualquier cadena que coincida con la matriz que en nuestro caso elegimos "boys"
fuente
Se me ocurrió una solución alternativa durante las pruebas. puede usar la función en el prototipo de cadena.
funciona bien en navegadores cromados
fuente
==
.