Différence entre ces 2 chaînes (JavaScript)

Sep 07 2020

J'essayais de créer des variables de type de données chaîne avec des valeurs de 2 manières.

  1. En tant que chaîne littérale
  2. Utilisation d'un nouveau mot-clé

Mais pour moi, il semble que les deux sont différents dans la représentation sur console.log . Quelqu'un peut-il me dire si la 2ème manière ne renvoie pas de chaîne ou est-elle différente?

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

Attendu:

a B c d e F

Production:

Réponses

9 xMayank Sep 07 2020 at 05:07

JavaScript a deux catégories de types principales, les primivites et les objets.

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

Pour les instructions d'attribution de valeurs primitives à une variable comme:

var str1 = "Hi";

JavaScript créera en interne la variable en utilisant:

String("Hi")

L'utilisation du nouveau mot-clé fonctionne différemment et renvoie un objet à la place.

4 GauravMogha Sep 07 2020 at 05:07

L'appel new String(something)crée un objet d'instance String.

Les résultats sont identiques via console.log () car il extrait simplement la chaîne primitive de l'instance String que vous lui passez.

Donc: juste String () renvoie une chaîne primitive. new String ('xyz') renvoie un objet construit par le constructeur String.

Il est rarement nécessaire de construire explicitement une instance String.

2 LarsNielsen Sep 07 2020 at 05:07

Vous travaillez avec deux choses différentes. Le var str1 = "abc"vous donne un primitif. Alors que le var str2 = new String("def");vous donne un objet string. Ces deux types se comportent différemment

AkhilRavindran Sep 07 2020 at 05:12

L'objet String vous permet de travailler avec une série de caractères; il enveloppe le type de données primitif chaîne de Javascript avec un certain nombre de méthodes d'assistance.

Comme JavaScript convertit automatiquement entre les primitives de chaîne et les objets String, vous pouvez appeler l'une des méthodes d'assistance de l'objet String sur une primitive de chaîne.

Unknow Sep 07 2020 at 05:07

Lorsque vous imprimez un objet, la console imprime souvent les propriétés de l'objet.

Si est une primitive, la console affiche simplement la valeur.

La primitive n'est pas encadrée, mais si vous créez une chaîne avec un constructeur, la chaîne est encadrée dans l'objet et a toujours des propriétés.

Si n'est qu'un littéral, il n'a de propriétés que lorsque vous accédez à la propriété d'une chaîne avec un .opérateur car la boxe se produit, mais après cela, il s'agit toujours d'un littéral sans rien d'ajouté, à cause de cela lorsque vous imprimez "The cat is very grumpy", imprimez simplement la valeur et rien plus. Les littéraux primitifs ne sont pas toujours des objets avec des propriétés, ne sont des objets que lorsqu'ils sont encadrés.