a="12345"
a[2]=3
a[2]='9'
console.log(a) //=> "12345"
何が起こっている??この癖は私に1時間の苦痛なデバッグを引き起こしました。賢明な方法でこれを回避する方法は?
a="12345"
a[2]=3
a[2]='9'
console.log(a) //=> "12345"
何が起こっている??この癖は私に1時間の苦痛なデバッグを引き起こしました。賢明な方法でこれを回避する方法は?
括弧を使用して文字列の個々の文字を書き換えることはできません。'getter' (つまり、読み取り) アクセスのみが利用可能です。ドキュメントの引用 ( MDN ):
ブラケット表記を使用した文字アクセスの場合、これらのプロパティを削除または値を割り当てようとしても成功しません。関連するプロパティは、書き込み可能でも構成可能でもありません。
それは、質問の「何が起こっているのか」の部分です。そして、「交換方法」の部分には、便利なスニペットがあります(ずっと前に書かれた回答から抜粋):
String.prototype.replaceAt = function(index, char) {
return this.slice(0, index) + char + this.slice(index+char.length);
}
そのまま使用することもできます (JS ネイティブ オブジェクトを拡張する弾丸を噛む) - または、このコードをいくつかのユーティリティ オブジェクトのメソッドとして挿入することもできます (明らかに、ソース文字列を最初のパラメーターとして取り、それを操作するように少し書き直す必要があります)。の代わりにthis
)。
この質問によると、これはすべてのブラウザーでサポートされているわけではありません。
文字列が長すぎない場合は、次のように比較的簡単に行うことができます。
var a="12345";
a = a.split("");
a[2]='9';
a = a.join("");
console.log(a);
var letters = a.split('');
letters[2] = 3;
letters[2] = 9;
console.log(letters.join(''));
乾杯