为什么分配到字符串的一部分(使用数组语法)不会在javascript中引发错误?

为什么分配到字符串的一部分(使用数组语法)不会在javascript中引发错误?,javascript,arrays,string,Javascript,Arrays,String,给定一个字符串,可以使用数组语法通过索引获取字符,如下所示: >>> str = "hello" "hello" >>> str[2] // gets the third character of the string "l" 字符串在JavaScript中是不可变的,因此不可能在适当的位置更改它们: >>> str[2] = "j" "j" >>> str "hello" 我不明白的是,为什么不抛出一个异常?对str[

给定一个字符串,可以使用数组语法通过索引获取字符,如下所示:

>>> str = "hello"
"hello"
>>> str[2] // gets the third character of the string
"l"
字符串在JavaScript中是不可变的,因此不可能在适当的位置更改它们:

>>> str[2] = "j"
"j"
>>> str
"hello"

我不明白的是,为什么不抛出一个异常?

对str[2]的赋值失败,但它仍然返回赋值给“a”的值

这似乎很清楚


[编辑]至于它为什么不返回错误,这可能取决于实现。我注意到Javascript更倾向于不以静默方式执行某些操作,而不是给出一个明确的错误。

它的工作方式与您期望的一致。在JSFIDLE中查看以下内容

请注意,这不会引发任何警告或错误。但是你可以通过使用严格模式来抛出它

请参阅以下关于严格模式的说明

"use strict";

var str = "hello";
alert(str[2]);
// "l"
try{
    str[2] = "j";
    // we never get here
    alert(str[2]);
}
catch(e){
    alert(e.message);
    // 2 is read-only
}

请注意,字符串不是数组。它们是JavaScript中5种基本类型之一。此外,它们不是通过引用来分配的,而是通过值来分配的。这似乎并没有回答这个问题?
"use strict";

var str = "hello";
alert(str[2]);
// "l"
try{
    str[2] = "j";
    // we never get here
    alert(str[2]);
}
catch(e){
    alert(e.message);
    // 2 is read-only
}