【问题标题】:JavaScript String as Array: Read but no WriteJavaScript 字符串作为数组:读但不能写
【发布时间】:2011-08-03 15:32:40
【问题描述】:

对于大多数浏览器中的 JavaScript*,您可以通过将字符串视为数组来读取字符。但是,在我尝试过的所有浏览器(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,他们提到了它但没有给出解释:

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

底线:让我感到奇怪和困惑的是,某些数组属性被赋予了字符串而不是其他属性。

更新:

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

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


*不是 IE 6 或 7

【问题讨论】:

  • jelloPeople.roam()?这是什么意思?
  • 阅读immutability——好东西要知道。
  • @Vivn Paliath:抱歉,这是一次糟糕的幽默尝试。
  • 字符串是不可变对象是相当普遍的

标签: javascript arrays string language-design


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 2011-05-02
      • 1970-01-01
      • 2017-03-11
      • 2014-10-30
      • 1970-01-01
      相关资源
      最近更新 更多