“String”对象与JavaScript中的字符串文字的区别

时间:2011-12-28 15:02:11

标签: javascript string firebug

  

可能重复:
  Difference between the javascript String Type and String Object?

在Firebug中写下这个简单的代码:

console.log(new String("string instance"));
console.log("string instance");

你看到的是:

enter image description here

为什么这两个console.log()调用导致不同的输出?为什么字符串文字与通过String对象创建字符串不同?它是Firebug表示风格吗?或者它们的性质不同?

4 个答案:

答案 0 :(得分:6)

他们不同。字符串文字是原始值,而“字符串”实例是对象。必要时,原始字符串类型会自动提升为String对象。

类似地,有数字基元和“数字”实例,以及布尔基元和“布尔”实例。

答案 1 :(得分:2)

new String("...")返回字符串对象

"..."返回字符串原语

有些不同之处:

  • new String("foo") === new String("foo") - false;对象引用相等规则
  • "foo" === "foo" - true;字符串相等规则

  • new String("foo") instanceof Object - true;它是从Object
  • 派生的对象
  • "foo" instanceof Object - false;它不是一个对象,而是一个原始值

由于这些“怪癖”,大多数时候你只想要一个原始值。请注意,字符串对象在添加时会自动转换为原始字符串,在它们上面调用String.prototype函数等。

更多信息in the specs

答案 2 :(得分:1)

console.log("string instance");打印字符串litral,但console.log(new String("string instance"));是对象,因此它打印字符串的所有细节,如每个索引和字符。注意下面的屏幕截图,它显示"string instance"的每个字符。

enter image description here

答案 3 :(得分:1)

尝试console.log((new String("string instance")).toString())

无论如何,这是因为new String("string instance")是一个对象,而console.log不会自动对对象进行字符串化