Diferencia en estas 2 cadenas (JavaScript)

Sep 07 2020

Estaba tratando de crear variables de tipo de datos de cadena con valores de 2 maneras.

  1. Como literal de cadena
  2. Usando una nueva palabra clave

Pero a mí me parece que ambos tienen una representación diferente en console.log . ¿Alguien puede decirme si 2nd way no devuelve la cadena o es de alguna manera diferente?

var str1 = "abc";
var str2 = new String("def");
console.log(str1);
console.log(str2);

Esperado:

a B C D e F

Salida:

Respuestas

9 xMayank Sep 07 2020 at 05:07

JavaScript tiene dos categorías de tipos principales, primivitas y objetos.

typeof new String(); // "object"
typeof '';           // "string"

Para declaraciones de asignar valores primitivos a una variable como:

var str1 = "Hi";

JavaScript creará internamente la variable usando:

String("Hi")

El uso de la nueva palabra clave funciona de manera diferente y devuelve un objeto en su lugar.

4 GauravMogha Sep 07 2020 at 05:07

La llamada new String(something)crea un objeto de instancia String.

Los resultados se ven iguales a través de console.log () porque simplemente extraerá la cadena primitiva de la instancia de String que le pasas.

Entonces: simplemente String () devuelve una cadena primitiva. new String ('xyz') devuelve un objeto construido por el constructor String.

Rara vez es necesario construir explícitamente una instancia de String.

2 LarsNielsen Sep 07 2020 at 05:07

Estás trabajando con dos cosas diferentes. El var str1 = "abc"te da un primitivo. Mientras que el var str2 = new String("def");te da un objeto de cuerda. Estos dos tipos se comportan de manera diferente

AkhilRavindran Sep 07 2020 at 05:12

El objeto String le permite trabajar con una serie de caracteres; envuelve el tipo de datos primitivo de cadena de Javascript con varios métodos auxiliares.

Como JavaScript convierte automáticamente entre primitivas de cadena y objetos String, puede llamar a cualquiera de los métodos auxiliares del objeto String en una primitiva de cadena.

Unknow Sep 07 2020 at 05:07

Cuando imprime un objeto, a menudo la consola imprime las propiedades del objeto.

Si es una primitiva, la consola simplemente imprime el valor.

La primitiva no está encuadrada, pero si crea una cadena con un constructor, la cadena está enmarcada en el objeto y siempre tiene propiedades.

Si es solo un literal, solo tiene propiedades cuando accede a la propiedad de una cadena con el .operador porque ocurre el boxeo, pero después de eso, sigue siendo un literal sin nada adicional agregado, por eso cuando imprime "The cat is very grumpy", solo imprime el valor y nada más. Los literales primitivos no siempre son objetos con propiedades, son solo objetos cuando están encuadrados.