繁体   English   中英

JavaScript字符串作为数组:读取但不写入

[英]JavaScript String as Array: Read but no Write

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

例如

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的文档 ,他们暗示了该文档 ,但没有给出解释:

“ ..尝试通过索引设置字符不会引发错误,但是字符串本身未更改。”

底线:奇怪的是,有些数组属性是给String而不是其他的,这让我感到困惑。

更新:

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

(已删除,并将对此进行研究,并可能在新问题中提出)


*不是IE 6或7

这仅仅是因为javascript字符串在设计上是不可变的。 一旦创建,便无法更改。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM