JavaScript字符串初始化

时间:2012-03-30 16:21:58

标签: javascript

在JavaScript中,根据我的理解,以下内容都是相同的:

var carter2 = new String();
var carter2 = '';
var carter2 = "";

哪一个最受欢迎?

5 个答案:

答案 0 :(得分:9)

不要使用

var str = new String();

由于

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

但是

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

但是,由于类型强制,以下工作(感谢Rocket指出)

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

单引号和双引号无关紧要,除了需要转义的引号。许多其他人都注意到单引号在创建HTML字符串时更好,因为XHTML期望属性具有双引号,并且您赢了不需要逃脱它们。

答案 1 :(得分:7)

执行new String()时,您不会返回string原语,而是返回String个对象。

对于所有意图和目的,它的作用类似于string原语,但有些情况下它不会。例如:

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

同样在比较事物时,可能会有问题。当您在JavaScript中比较对象时,如果它们是相同的对象,那么它只是true,而不仅仅是相同的值。例如:

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

您可以使用.valueOf()String对象转换为string原语。

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

因此,我高度建议使用var a = ''var a = ""。至于单引号与双引号,没有区别。考虑这个例子:

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 "

因此,由您决定是使用'还是",但我建议使用new String()以上的人。

答案 2 :(得分:2)

虽然''""相同(它们是基元),但new String() ,因为它返回String 对象

typeof '' == 'string'
typeof "" == 'string'
typeof new String() == 'object'

请参阅Distinction between string primitives and String objects

答案 3 :(得分:2)

我更喜欢使用var carter2 = '';,因为:

  1. 这不是动词
  2. 双引号可能会与字符串中的属性双引号冲突。
  3. 所以我更喜欢在java脚本中使用单引号,在html属性中使用双引号。

    UPD:这是我的偏好,我知道单双引号是可以互换的。

答案 4 :(得分:0)

绝对没有构造函数调用。

所以使用单引号或双引号(即字面值)。

请注意,这种优化(文字与构造函数)我认为只有在你有数百或数千条这样的陈述时才会有用。