JavaScript String as Array:读取但不写入

时间:2011-08-03 15:32:40

标签: javascript arrays string language-design

对于大多数浏览器中的JavaScript *,您可以通过将其视为Array来读取String中的字符。但是,在我尝试过的所有浏览器(IE9,Chrome,Firefox)中,你都不能像数组那样写入它。

For example

var string = 'hello world';
alert(string[0]);//alerts 'h'
alert(string);//alerts 'hello world'

string[0]='j';
alert(string[0]);//alerts 'h'
alert(string);//alerts 'hello world'

这不仅仅是JavaScript开发人员的反响:

jelloPeople.roam();


有人知道这背后的原因吗?


例如,我查看了Mozilla's documentation,他们提到了它,但没有给出解释:

“..通过索引设置字符不会引发错误,但字符串本身没有变化。”

结论:对我来说奇怪而且令人困惑的是,一些数组属性被赋予了Strings而不是其他属性。

<击>更新

好的,所以JavaScript Strings是不可变对象,但为什么呢?如果它们不是不可变的,那么上面的操作似乎会更快(改变1个字符而不是制作新的11个字符串)。事实上,我没有看到String函数的情况,如果它们不是不可变的,性能会受到负面影响,但我看到几个性能会得到改善。此外,JavaScript中没有真正的多线程,因此不存在不可变的优势。

(删除并将研究此问题,并可能在新的问题中提问)


*不是IE 6或7

2 个答案:

答案 0 :(得分:4)

这只是因为javascript字符串是immutable的设计;一旦创建,就无法更改。

答案 1 :(得分:4)

我认为这可能是因为JavaScript中的字符串是不可变的。请注意,每个字符串函数实际上并不会更改字符串本身,而是返回一个新字符串。这对于直接更改字符是一样的,它不适用于不可变模型。