在JavaScript中,根据我的理解,以下内容都是相同的:
var carter2 = new String();
var carter2 = '';
var carter2 = "";
哪一个最受欢迎?
答案 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 = '';
,因为:
所以我更喜欢在java脚本中使用单引号,在html属性中使用双引号。
UPD:这是我的偏好,我知道单双引号是可以互换的。
答案 4 :(得分:0)
绝对没有构造函数调用。
所以使用单引号或双引号(即字面值)。
请注意,这种优化(文字与构造函数)我认为只有在你有数百或数千条这样的陈述时才会有用。