2012-03-30 11 views

Respuesta

7

No utilice

var str = new String(); 

Debido

var str = new String("dog"); 
var str2 = new String("dog"); 
str == str2; // false 

Pero

var str = "dog"; 
var str2 = "dog"; 
str == str2; // true 

Sin embargo, debido a la conversión de tipos, las siguientes obras (Gracias a Rocket por señalarlo)

var str = new String("dog"); 
var str2 = "dog"; 
str == str2; // true 

Las comillas simples y dobles no importan, excepto por las comillas que se deben evitar. Muchos otros han notado que las comillas simples son mejores cuando se crean cadenas HTML, ya que XHTML espera que los atributos tengan comillas dobles, y no tendrá que escapar de ellas.

+1

Solo una nota: 'new String ('dog') == 'dog'' es verdadero, pero' new String (' dog ') ===' dog'' es falso. Tenga en cuenta el '==' contra '==='. –

+1

Otra nota: (X) Los atributos de HTML se pueden citar en comillas simples o dobles. –

-1

Definitivamente sin la llamada a la función de constructor.

Por lo tanto, con comillas simples o dobles (es decir, literal).

Nota, este tipo de optimización (literal vs. constructor) Creo que solo importaría si tuviera cientos o miles de estas afirmaciones.

+1

No estoy seguro de lo que quiere decir con "esto solo importaría si tuviera [muchas] afirmaciones" - no hay absolutamente ninguna diferencia entre ''' y '" ', pero hay una [gran diferencia] (http: //stackoverflow.com/a/9946840/201952) entre primitivos y objetos 'String' – josh3736

+0

uhh ... eso es a lo que me refería. Estoy claramente a favor del literal vs. constructor (¿no leíste mi respuesta?) no argumentando solo vs. doble. Creo que solo leyó mal, y definitivamente no vale dos votos a favor. – thescientist

+0

El problema es que hay una consideración mucho más grande que el rendimiento: los literales le dan una primitiva de cadena, mientras que el constructor le da una 'String' ** object **. Vea las otras respuestas para las implicaciones de esa diferencia. – josh3736

1

Yo prefiero usar var carter2 = ''; porque:

  1. No es verbosive
  2. Las comillas dobles podrían entrar en conflicto con los atributos comillas dobles dentro de cadenas.

Prefiero usar comillas simples en java-script, comillas dobles para atributos html.

UPD: esta es mi preferencia, sé que las comillas simples son intercambiables.

+0

Puede usar comillas simples en atributos HTML, 'Google'. –

+1

Sé que puedo. Estaba hablando de mis preferencias. –

+0

Ah bien. Pensé que lo señalaría. –

6

Al hacer new String(), no se le devuelve una primitiva string, sino un objeto String.

Para todos los efectos, actúa como una primitiva string, pero hay casos en que no lo hará. Por ejemplo:

var a = new String('body'); 
jQuery(a); // This will *not* function as expected 
      // This will make a jQuery object containing a "String" object 
      // It will NOT treat it as a selector string 

También cuando se comparan cosas, puede haber un problema.Cuando compara objetos en JavaScript, es solo true si son el mismo objeto exacto , no solo el mismo valor. Ejemplo:

var a = new String('test'); 
var b = new String('test'); 
var c = a; 
var d = 'test'; 

a === b; // false, a and b are different objects (a == b is also false) 
c === a; // true, a is the same object as c 
c === b; // false, c (which is a) is a different object than b 
d === a; // false, d is a primitive and a is an object, they are not equal 
'test' === d; // true, they are both string primitives 

d == a; // true, this uses "==" so only value is compared, not type 

Puede utilizar .valueOf() para convertir un objeto a un Stringstring primitiva.

new String('test').valueOf() === 'test'; // true 

Por lo tanto, altamente sugieren el uso de var a = '' o var a = "". En cuanto a las comillas simples frente a las comillas dobles, no hay diferencia. Considere este ejemplo:

var a = "My name is Joe O'Ryan"; 
var b = 'My name is Joe O\'Ryan'; // need to escape the ' 
var c = 'Joe said: "Hi"'; 
var d = "Joe said \"HI\""; // need to escape the " 

Por lo tanto, depende de usted si desea utilizar o '", pero sugiero los mayores de new String().

Cuestiones relacionadas