【发布时间】:2011-08-03 15:32:40
【问题描述】:
对于大多数浏览器中的 JavaScript*,您可以通过将字符串视为数组来读取字符。但是,在我尝试过的所有浏览器(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,他们提到了它但没有给出解释:
“..尝试通过索引设置字符不会引发错误,但字符串本身没有改变。”
底线:让我感到奇怪和困惑的是,某些数组属性被赋予了字符串而不是其他属性。
更新:
好的,JavaScript 字符串是不可变对象,但为什么呢?如果它们不是不可变的(更改 1 个字符而不是创建一个新的 11 个字符的字符串),上述操作似乎会更快。事实上,我没有看到字符串函数的情况,如果它们不是不可变的,性能会受到负面影响,但我看到有几个性能会得到改善。此外,JavaScript 中没有真正的多线程,因此那里的不可变对象没有优势。
(已删除并将对此进行研究,并可能在新问题中提出)
*不是 IE 6 或 7
【问题讨论】:
-
jelloPeople.roam()?这是什么意思? -
阅读immutability——好东西要知道。
-
@Vivn Paliath:抱歉,这是一次糟糕的幽默尝试。
-
字符串是不可变对象是相当普遍的
标签: javascript arrays string language-design