single escape define javascript equality comparison-operators equality-operator identity-operator

escape - javascript single quote vs double



¿Por qué el nuevo String(''hello'')=== new String(''hello'') se evalúa como False? (7)

Dos objetos String siempre serán desiguales entre sí. Tenga en cuenta que JavaScript tiene valores primitivos de cadena, así como un constructor de cadenas para crear objetos de envoltura. Todas las comparaciones de igualdad de objetos (especialmente con === ) se llevan a cabo como una prueba para la igualdad de referencia . Las referencias a dos objetos diferentes, por supuesto, nunca serán iguales entre sí.

Entonces "hello" === "hello" será true porque son primitivas de cadena.

¿Por qué la declaración siguiente devuelve falso en JavaScript?

new String(''hello'') === new String(''hello'')


Está comparando instancias de objeto, que no es como una comparación de cadenas ( ''hello'' === ''hello'' ) Comparar objetos en Javascript es en realidad comparar las direcciones de memoria de los objetos y siempre devolverá falso porque las direcciones de memoria son diferentes para cada objeto .

Compare los valores de cadena en lugar de la instancia del objeto - jsFiddle

( String(''hello'') === String(''hello'') ) // returns true due to comparing strings

Estrictamente comparar dos objetos - falso no es el mismo objeto

new String(''hello'') === new String(''hello'')

Estrictamente comparar dos cadenas: verdadero, mismo valor devuelto y el mismo tipo devuelto

String(''hello'') === String(''hello'')


Le está pidiendo a javascript que compare dos instancias diferentes de la variable, no el valor de cadena que vive dentro de la variable.

Entonces, por ejemplo, digamos que tengo un pedazo de papel con la palabra "Hello World" escrita en él (Paper1) y mi hermano tiene una hoja de papel diferente con la palabra "Hello World" escrita en él (Paper2).

Cuando diga Paper1 === Paper2 obtendrá false, porque no son exactamente el mismo papel, aunque las palabras escritas en el papel sean las mismas.

Si dijera Paper1.toString () === Paper2 .toString (), se volvería cierto, porque estamos comparando las palabras escritas en el papel, no el papel mismo.


Se evalúa como falso porque está comparando dos objetos diferentes: nuevo creará un nuevo objeto.

Publicación relacionada: ¿Cuál es la palabra clave ''nueva'' en JavaScript? Lo que explica en su respuesta (extensa):

Es [nuevo] es 4 cosas:

  1. Crea un nuevo objeto. El tipo de este objeto, es simplemente objeto .
  2. Establece que la propiedad interna, inaccesible, [[prototipo]] de este nuevo objeto sea el objeto prototipo accesible y externo de la función del constructor (cada objeto función tiene automáticamente una propiedad prototipo ).
  3. Ejecuta la función constructora, utilizando el objeto recién creado cada vez que se menciona.
  4. Devuelve el objeto recién creado, a menos que la función constructora devuelva un valor no primitivo. En este caso, se devolverá ese valor no primitivo.

Su código básicamente dice "Tome un pedazo de papel y escriba ''hola'' en él. Tome otro pedazo de papel y escriba ''hola'' sobre eso. ¿Son el mismo pedazo de papel?"


También si lo haces si ({hello: 1} === {hello: 1}) {console.log ("yay"); } console.log nunca ocurre, porque es un objeto.

Puede comparar 2 objetos literales (como mi primer ejemplo) haciendo un ciclo en estos objetos y cuando encuentra una diferencia, conoce el resultado. Es más difícil hacer este truco en un objeto instanciado, comparar 2 funciones es una locura.

Pero si JavaScript no lo hace por usted es porque es muy pesado, tiene que verificar cada tipo de cada atributo para codificarlo si es una función, etc. ... y obviamente no es útil hacerlo.

Puede usar instanceof si quiere verificar 2 objetos "orígenes", porque typeof le devolverá "object". Y para probar 2 objetos "nuevos String", debe usar toString new String ("hello") .toString () == new String ("hello") .toString () o si desea verificar el objeto sin probar los atributos nueva secuencia ("hello") instanceof String && new String ("hello") instanceof String

es verdad.

El enlace proporcionado por BeyelerStudios explica perfectamente lo que hace el nuevo, espero que ayude.


typeof(new String()) === ''object''; ==> true (new Object()) === (new Object()); ==> false

Cualquier estructura de "objeto" en el " Heap " es única;

Heap vs. Stack