JavaScript字符串初始化

Nat*_*Pet 11 javascript

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

var carter2 = new String();
var carter2 = '';
var carter2 = "";
Run Code Online (Sandbox Code Playgroud)

哪一个最受欢迎?

Jua*_*des 9

不要用

var str = new String();
Run Code Online (Sandbox Code Playgroud)

因为

var str = new String("dog");
var str2 = new String("dog"); 
str == str2; // false
Run Code Online (Sandbox Code Playgroud)

var str = "dog";
var str2 = "dog"; 
str == str2; // true
Run Code Online (Sandbox Code Playgroud)

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

var str = new String("dog");
var str2 = "dog"; 
str == str2; // true
Run Code Online (Sandbox Code Playgroud)

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


Roc*_*mat 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
Run Code Online (Sandbox Code Playgroud)

同样在比较事物时,可能会有问题.在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
Run Code Online (Sandbox Code Playgroud)

您可以使用.valueOf()String对象转换为string基元.

new String('test').valueOf() === 'test'; // true
Run Code Online (Sandbox Code Playgroud)

所以,我强烈建议使用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 "
Run Code Online (Sandbox Code Playgroud)

因此,由您决定是否使用'",但我建议那些结束new String().