On Firebug:
>>> str1 = String('String One');
"String One"
typeof(str1);
"string"
>>> str2 = new String('String Two');
String { 0="S", 1="t", 2="r", more...}
typeof(str2);
"object"
我的问题是两种技术之间的区别是什么? 一个优于另一个的优势是什么?
答案 0 :(得分:2)
唯一真正的区别是使用new String()
,你会得到一个从Object
延伸的对象,这意味着这段代码可以工作:
var foo = new String( 'bar' );
foo.property = 42;
而这不是:
var foo = 'bar';
foo.property = 42;
如果您需要获取字符串,它有时也很有用:
var foo = new String( 21*2 );
答案 1 :(得分:1)
这种方式确实没有太大优势,因为几乎没有人以这种方式创建字符串,只是声明var a = 'This is a string';
这类似于创建数组的可接受方式不是{ {1}}但是var a = new Array()
。我想第一种方式可能有优势,因为它被标记为字符串而不是对象,但
var a = []
答案 2 :(得分:0)
在第一个示例中,您获得了返回类型的String();
在第二个中,您获得了类型的String()本身 /或更准确地说是新String()实例的类型。
更多信息:
http://www.w3schools.com/jsref/jsref_String.asp
http://www.w3schools.com/jsref/jsref_obj_string.asp
答案 3 :(得分:0)
new String
包装器是很久以前为了取悦Java人员而使用该语言的疣。正如您可能已经注意到的那样,这些不一致是很好的理由,为什么它今天不是广泛推荐的做法。
同时,如果您想将值转换为字符串,则使用String(something)
非常有用,但大多数人只使用较短的''+something
。
String('string')
是不必要的,因为'string'
已经是一个字符串。
tldr 避免使用new String
和其他包装,例如new Array
和new Number
,就像瘟疫一样。