Durante el proceso de solicitud de JavaScript, encontraremos varias comparaciones. Hoy, he compilado tres situaciones para ti y las aprendí juntas.
1. Comparación de dos objetos
Las comparaciones de JavaScript se mezclan con algunas características extrañas, echemos un vistazo a algunas comparaciones simples.
// Comparación de valores sin procesar> var a = 12undefined> var b = 12undefined> a == btrue> a === btrue // comparación de objetos> var c = [] undefinado> var d = [] undefinado> c == dfalse> c === dfalse
De los resultados anteriores, podemos ver que comparar dos valores originales parece ser un poco diferente de la comparación de objetos. Si compara los valores de dos objetos, incluso si sus valores son los mismos, el resultado final es diferente. Al comparar dos objetos, se deben comparar las referencias de los dos objetos.
Si hacemos esto:
> var m = {} indefinido> n = m {}> n === mtrueSignifica que ambas variables apuntan al mismo objeto, por lo que son las mismas.
2. Comparación de diferentes tipos
También está la siguiente situación especial
> 12 == "12" True> null == UndefinedTrue> Undefined == FALSEFALSE> NULL == FALSEFALSE> NULL === UndefinedFalse
¿Por qué los enteros pueden ser iguales a las cuerdas? Esto se debe a que == (igual a, no congruente) no compara los tipos. Antes de comparar, escribirá los valores que deben compararse. Aquí, la cadena se convertirá en tipos numéricos y luego se comparará . ¿Por qué es tan seguro? Hagamos algunos experimentos.
> 1 + 23> 1 + "2" '12'> 2 <"12" True> "2" <"12" Falso
Del ejemplo anterior, podemos ver que el valor 2 es realmente más pequeño que la cadena 12. Si la comparación se convirtió a una cadena antes de que el valor se convirtiera en una cadena, el resultado debería ser "2"> "12".
¿No lo crees todavía? Déjame darte otro ejemplo.
> "12d"> 12false> "12d" <12False> "12d" == 12false> "12" <"12d" Verdadero
¿Por qué es esto? Si convierte 12 en una cadena, entonces 12D debería ser mayor que 12, ¿verdad? ¿Por qué lo comparas con falso? Supongo que es por el tipo especial a continuación.
> Nan <1false> nan> 1false
No importa con qué se compara Nan, devolverá falso. Incluyendo a sí mismo. Por lo tanto, la mejor manera de determinar si una variable es nan es x! = X Si el verdadero devuelto, significa que x es nan . Luego, aquí debería ser cuando 12D se convertirá en un tipo numérico porque tiene caracteres especiales y finalmente se convierte en Nan. No importa cómo lo compare con el tipo numérico, el resultado es falso.
Para los operadores numéricos y de cadena, el operador de signo Plus se comporta de manera diferente al operador de comparación. El operador más prefiere cadenas, y si uno de los operandos es una cadena, se convertirá en una cadena. Los operadores de comparación prefieren los números, y las comparaciones de cadenas solo se realizarán cuando ambos números son cadenas.
En cuanto a lo nulo y indefinido arriba. . . . . No sé cómo explicar su comportamiento por el momento. Solo puedo recordarlo por ahora. Porque son especiales.
3. Comparación de objetos con valores originales
Si dos objetos que deben compararse son objetos y esqueletos JavaScript, se realizará un cierto grado de conversión de tipo. Encuentre una manera de convertir el valor del objeto en el valor original. En términos generales, hay dos métodos valueOf, toString . El siguiente es el proceso de conversión de un objeto vacío:
// Lo escribí directamente> a = {} {} // 1. Value de conversión> a.valueOf () {} // 2. Si la operación anterior da como resultado un valor sin procesar, use toString para convertir. (Y viceversa)> A.ToString () '[Object Object]'> a == '[Object Object]' Verdadero Lo anterior es en realidad un proceso de conversión de objetos incorporado y un mecanismo de JavaScript. Primero llamará valueOf de la conversión. Si el valor obtenido no es un valor primitivo, llamará toString para su conversión. El valor final es '[object Object]' un valor muy extraño, pero es el valor original. Si la variable A y este valor son iguales (no congruentes), se puede obtener un resultado verdadero. (¿Colapsó?)
Sin embargo, la guía autorizada proporciona los siguientes principios, podemos referirnos a ella.
Convierta los valores RAW JavaScript Language Core Clases incorporados Primero intente convertir con ValueO F, y luego use toString para la conversión. Excepto para la clase de fecha, solo usa toString para la conversión. Los objetos que no están en el núcleo de JavaScript se convierten en valores originales a través de la forma en que se definen en sus respectivas implementaciones.
De acuerdo con la explicación anterior. Cuando comparamos A = {} con el valor original, llamaremos primero la función valueOf , y el resultado es que {} obviamente no es un valor primitivo. Luego, la conversión se realizará usando toString . Finalmente, ese extraño resultado salió. Pero este extraño resultado '[object Object]' es de hecho el valor original de {}. (Es el literal de una cadena).
Lo anterior es un resumen comparativo en JavaScript. Espero que la descripción en este artículo sea útil para todos cuando aprendan JavaScript.