2011-12-28 4 views
7

Eventuali duplicati:
Difference between the javascript String Type and String Object?differenza di oggetto "String", e stringa letterale in JavaScript

Scrivi questo semplice codice Firebug:

console.log(new String("string instance")); 
console.log("string instance"); 

Quello che si vede is:

enter image description here

Perché queste due chiamate console.log() provocano output diversi? Perché la stringa letterale non è la stessa cosa della creazione di una stringa tramite l'oggetto String? È uno stile di rappresentazione di Firebug? O differiscono in natura?

+0

Si prega di visitare il palo http://stackoverflow.com/questions/2051833/difference-between-the-javascript-string-type-and-string-object – Ravia

+0

-1 duplicato evidente –

+2

@ I duplicati TomalakGeret'kal non garantiscono downvotes, basta votare per chiudere come duplicato i Se hai il rappresentante, o lo fai notare e qualcun altro lo farà. – Davy8

risposta

6

Differiscono. Una stringa letterale è un valore primitivo, mentre un'istanza "String" è un oggetto. Se necessario, il tipo di stringa primitiva viene automaticamente promosso a un oggetto String.

Analogamente, esistono primitive numeriche e istanze "Numero" e primitive booleane e istanze "Booleane".

+1

Per quello che vale, per ottenere una stringa letterale da un oggetto String, è possibile chiamare la funzione 'toString()' sull'oggetto String. Ad esempio, 'new String (" bork ") ===" bork "' è falso, mentre 'new String (" bork "). ToString() ===" bork "' è vero. Oh, javascript ... –

+0

E come si verifica questa "promozione"? – JohnMerlino

2

new String("...") restituisce una stringa oggetto.

"..." restituisce una stringa primitiva.

Alcune differenze sono:

  • new String("foo") === new String("foo") - false; regole di uguaglianza degli oggetti di riferimento
  • "foo" === "foo" - true; uguaglianza stringa governa

e:

  • new String("foo") instanceof Object - true; è un oggetto derivato da Object
  • "foo" instanceof Object - false; non è un oggetto ma un valore primitivo

La maggior parte delle volte si desidera solo un valore primitivo a causa di questi "quirk". Nota che gli oggetti stringa vengono convertiti automaticamente in stringhe primitive quando li aggiungi, chiamando le funzioni String.prototype su di essi, ecc.

Altre informazioni in the specs.

1

console.log("string instance"); stampa stringa litrale ma console.log(new String("string instance")); è un oggetto che stampa tutti i dettagli di stringa come ogni indice e carattere. Guarda la schermata qui sotto, che mostra ogni carattere di "string instance".

enter image description here

1

provare console.log((new String("string instance")).toString())

In ogni modo, è perché new String("string instance") è un oggetto, e non console.log oggetti automaticamente stringa i