Differenza in queste 2 stringhe (JavaScript)
Stavo cercando di creare variabili di tipi di dati stringa con valori in 2 modi.
- Come stringa letterale
- Utilizzo di una nuova parola chiave
Ma a me sembra che entrambi siano diversi nella rappresentazione su console.log . Qualcuno può dirmi se 2nd way non restituisce la stringa o è in qualche modo diverso?
var str1 = "abc";
var str2 = new String("def");
console.log(str1);
console.log(str2);
Previsto:
a B c D e F
Produzione:
Risposte
JavaScript ha due categorie di tipi principali, primitive e oggetti.
typeof new String(); // "object"
typeof ''; // "string"
Per istruzioni di assegnazione di valori primitivi a una variabile come:
var str1 = "Hi";
JavaScript creerà internamente la variabile utilizzando:
String("Hi")
L'uso della nuova parola chiave funziona in modo diverso e restituisce invece un oggetto.
La chiamata new String(something)crea un oggetto istanza String.
I risultati sono gli stessi tramite console.log () perché estrarrà semplicemente la stringa primitiva dall'istanza String che gli passi.
Quindi: semplicemente String () restituisce una primitiva di stringa. new String ('xyz') restituisce un oggetto costruito dal costruttore String.
Raramente è necessario costruire in modo esplicito un'istanza String.
Stai lavorando con due cose diverse. Il var str1 = "abc"ti dà un primitivo. Mentre var str2 = new String("def");ti dà un oggetto stringa. Questi due tipi si comportano in modo diverso
L'oggetto String ti consente di lavorare con una serie di caratteri; avvolge il tipo di dati primitivo stringa di Javascript con un numero di metodi di supporto.
Poiché JavaScript converte automaticamente tra primitive stringa e oggetti String, è possibile chiamare uno qualsiasi dei metodi di supporto dell'oggetto String su una primitiva stringa.
Quando si stampa un oggetto, spesso la console stampa le proprietà dell'oggetto.
Se è una primitiva, la console stampa semplicemente il valore.
La primitiva non è inscatolata, ma se crei una stringa con un costruttore la stringa è inscatolata nell'oggetto e ha sempre proprietà.
Se è solo un letterale, ha proprietà solo quando si accede alla proprietà di una stringa con l' .operatore perché si verifica il boxing, ma dopo di ciò, è ancora un letterale senza aggiunta di nulla, a causa di ciò quando si stampa "The cat is very grumpy", basta stampare il valore e niente Di Più. Le primitive letterali non sono sempre oggetti con proprietà, sono solo oggetti quando sono inscatolati.