为什么分配到字符串的一部分(使用数组语法)不会在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
}