对于大多数浏览器中的JavaScript *,您可以通过将其视为Array来读取String中的字符。但是,在我尝试过的所有浏览器(IE9,Chrome,Firefox)中,你都不能像数组那样写入它。
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
答案 0 :(得分:4)
这只是因为javascript字符串是immutable的设计;一旦创建,就无法更改。
答案 1 :(得分:4)
我认为这可能是因为JavaScript中的字符串是不可变的。请注意,每个字符串函数实际上并不会更改字符串本身,而是返回一个新字符串。这对于直接更改字符是一样的,它不适用于不可变模型。