a="12345"
a[2]=3
a[2]='9'
console.log(a) //=> "12345"
这是怎么回事?这个怪癖导致我1小时的痛苦调试。如何以合理的方式避免这种情况?javascript索引编号的字符串分配问题
a="12345"
a[2]=3
a[2]='9'
console.log(a) //=> "12345"
这是怎么回事?这个怪癖导致我1小时的痛苦调试。如何以合理的方式避免这种情况?javascript索引编号的字符串分配问题
不能使用括号来重写字符串的单个字符;只有“getter”(即读取)访问可用。引用该文档(MDN):
对于字符使用访问括号符号,试图删除或 值分配给这些特性将不会成功。涉及的属性 既不可写也不可配置。
这就是问题的“正在发生什么”部分。而对于“如何更换”部分有(从an answer written long, long ago拍摄)一个有用的片段:
String.prototype.replaceAt = function(index, char) {
return this.slice(0, index) + char + this.slice(index+char.length);
}
,因为它是(咬延长JS原生对象的子弹),您可以使用 - 或注入该代码的方法在一些实用程序对象中(显然它应该重写一下,将源字符串作为其第一个参数并使用它而不是this
)。
var letters = a.split('');
letters[2] = 3;
letters[2] = 9;
console.log(letters.join(''));
干杯
根据this question,这不是所有的浏览器中支持。
如果你的字符串不是太长,你可以做到这一点比较容易这样的:
var a="12345";
a = a.split("");
a[2]='9';
a = a.join("");
console.log(a);