似乎真的会使这成为可能:
var s = 'asdf';
s.foo = 2;
s.foo; // 2
但它不是,而与函数相同,就像jQuery一样。
答案 0 :(得分:4)
他们不是,至少不总是如此。引用 MDN article on JS strings :
请注意,JavaScript区分String对象和 原始字符串值。 (布尔和数字也是如此。)
字符串文字(用双引号或单引号表示)和字符串 在非构造函数上下文中从String调用返回(即,没有 使用new关键字)是原始字符串。 JavaScript自动 将基元转换为String对象,以便可以使用它 原始字符串的字符串对象方法。在某种情况下 方法将在原始字符串或属性查找上调用 发生时,JavaScript会自动换行字符串原语和 调用方法或执行属性查找。
答案 1 :(得分:1)
如果 javascript中的所有内容都是一个对象,那么:
var a = new String('foo');
var b = new String('foo');
a == b; // false since objects are never equal
a.valueOf() == b.valueOf(); // true, since the values are equal
因此,为方便起见,有一些基元被强制转换为对象,这样做是有意义的:
// a and b are string primitives
var a = 'foo';
var b = 'foo';
a == b; // true, a and b treated a primitives
a.length == 3; // true, a is treated as a String ojbect
a.split(''); // ['f', 'o','o'];
但该coersion仅用于评估表达式,它不会更改标识符的值。