Diferença nestas 2 Strings (JavaScript)

Sep 07 2020

Eu estava tentando criar variáveis ​​de tipos de dados de string com valores de 2 maneiras.

  1. Como string literal
  2. Usando nova palavra-chave

Mas, para mim, parece que os dois são diferentes em representação no console.log . Alguém pode me dizer se a 2ª via não retorna string ou é de alguma forma diferente?

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

Esperado:

abc, def

Resultado:

Respostas

9 xMayank Sep 07 2020 at 05:07

JavaScript tem duas categorias principais de tipo, primivites e objetos.

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

Para declarações de atribuição de valores primitivos a uma variável como:

var str1 = "Hi";

JavaScript criará internamente a variável usando:

String("Hi")

Usar a nova palavra-chave funciona de maneira diferente e, em vez disso, retorna um objeto.

4 GauravMogha Sep 07 2020 at 05:07

Chamar new String(something)cria um objeto de instância String.

Os resultados parecem os mesmos via console.log () porque ele apenas extrairá a string primitiva da instância String que você passar para ela.

Portanto: simplesmente String () retorna uma primitiva de string. new String ('xyz') retorna um objeto construído pelo construtor String.

Raramente é necessário construir explicitamente uma instância de String.

2 LarsNielsen Sep 07 2020 at 05:07

Você está trabalhando com duas coisas diferentes. O var str1 = "abc"dá a você um primitivo. Enquanto o var str2 = new String("def");dá a você um objeto string. Esses dois tipos se comportam de maneira diferente

AkhilRavindran Sep 07 2020 at 05:12

O objeto String permite trabalhar com uma série de caracteres; ele envolve o tipo de dados primitivo de string de Javascript com vários métodos auxiliares.

Como o JavaScript converte automaticamente entre primitivos de string e objetos String, você pode chamar qualquer um dos métodos auxiliares do objeto String em um primitivo de string.

Unknow Sep 07 2020 at 05:07

Quando você imprime um objeto, geralmente o console imprime as propriedades do objeto.

Se for um primitivo o console apenas imprime o valor.

O primitivo não é encaixotado, mas se você criar uma string com um construtor, a string será encaixotada no objeto e sempre terá propriedades.

Se for apenas um literal, ele só terá propriedades quando você acessar a propriedade de uma string com .operador porque ocorre o boxing, mas depois disso, ele continua sendo um literal sem nada adicional adicionado, por isso quando você imprimir "The cat is very grumpy", basta imprimir o valor e nada Mais. literais primitivos nem sempre são objetos com propriedades, são apenas objetos quando estão em caixas.