2011-12-28 12 views
7

Duplicar posibles:
Difference between the javascript String Type and String Object?diferencia de objeto "Cadena", y literal de cadena en JavaScript

escribir este código simple en Firebug:

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

Lo que se ve es:

enter image description here

¿Por qué estas dos llamadas console.log() producen resultados diferentes? ¿Por qué la cadena literal no es lo mismo que crear una cadena a través del objeto String? ¿Es un estilo de representación de Firebug? ¿O difieren en naturaleza?

+0

Por favor, visite el puesto http://stackoverflow.com/questions/2051833/difference-between-the-javascript-string-type-and-string-object – Ravia

+0

-1 obvio duplicado –

+2

@ TomalakGeret'kal duplicados no garantizan votos abajo, solo vote para cerrar como duplicado i Si tiene el representante, o simplemente lo señala y alguien más lo hará. – Davy8

Respuesta

6

Difieren. Un literal de cadena es un valor primitivo, mientras que una instancia de "Serie" es un objeto. El tipo de cadena primitiva se promociona automáticamente a un objeto String cuando sea necesario.

De manera similar, existen primitivas numéricas y instancias "Number", y primitivas booleanas y "booleanas".

+1

Por lo que vale, para obtener un literal de cadena de un objeto String, puede llamar a la función 'toString()' en el objeto String. Por ejemplo, 'new String (" bork ") ===" bork "' es falso, mientras que 'new String (" bork "). ToString() ===" bork "' es verdadero. Oh, javascript ... –

+0

¿Y cómo ocurre esta "promoción"? – JohnMerlino

2

new String("...") devuelve una cadena objeto.

"..." devuelve una cadena primitiva.

Algunas diferencias son:

  • new String("foo") === new String("foo") - false; reglas de igualdad de referencia de objeto
  • "foo" === "foo" - true; Reglas de igualdad de cadenas

y:

  • new String("foo") instanceof Object - true; es un objeto derivado de Object
  • "foo" instanceof Object - false; no es un objeto, sino un valor primitivo

La mayoría de las veces, solo desea un valor primitivo debido a estos "caprichos". Tenga en cuenta que los objetos de cadena se convierten automáticamente en cadenas primitivas al agregarlos, llamando a las funciones String.prototype en ellos, etc.

Más información in the specs.

1

console.log("string instance"); imprime el hilo litral pero console.log(new String("string instance")); es un objeto así que está imprimiendo todos los detalles de la secuencia como cada índice y carácter. Tenga cuidado con la captura de pantalla a continuación, muestra cada carácter de "string instance".

enter image description here

1

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

De todas formas, es porque new String("string instance") es un objeto, y no console.log objetos automáticamente stringify

Cuestiones relacionadas