この質問は実際には別の質問の結果であり、私はいくつかの実験を行いましたが、結果は私をさらに混乱させます。私は実際に内部で何が起こっているのかを説明する答えを期待しています。
私が試したことは、
ここで明確な説明を得たので 、これを基本的な仮定として維持しました。
var a = [];
a['a1'] = [];
a['a2'] = [];
console.log(a); // []
console.log(a['a1']); // []
console.log(a['a2']); // []
テスト1
b[0]
これは、プロパティとして出力され、プロパティa
にアクセスできるため、非常に混乱しました。文字配列として扱うことができると考えたため、別の値を割り当てようとしましたが、成功しませんでした。基本的な仮定から、これをchar配列(より一般的には配列)として扱うことができれば、割り当ては成功しているはずです。それは基本的な仮定を破ります。length
var b
var b = 'abcd';
b['b1'] = [];
console.log(b); // abcd
console.log(b.length); // 4
console.log(b['b1']); // undefined
テスト2
しかし、私がこのように作成すると、割り当てが発生します、
var bb = ['a', 'b', 'c', 'd'];
bb[4] = [];
console.log(bb); // ["a", "b", "c", "d", []]
console.log(bb.length); // 4
console.log(bb[0]); // a
console.log(bb[4]); // []
b[4] = [];
このことから、成功するかもしれないと思いましたが、
var b = 'abcd';
b[4] = [];
console.log(b); // abcd
console.log(b.length); // 4
console.log(b[4]); // undefined
私の質問は、変数がいくつかの共通の機能を共有しているのに、なぜこれらの割り当ての動作が異なるのかということです。
これがデモです
誰かが私に実際に内部で起こっていることについて明確な説明をしてくれませんか?
追加のテスト
次に、数値割り当てを試してみると、これら2つとはまったく異なる動作をします。
var c = 1234;
c[4] = [];
console.log(c); //1234
console.log(c.length); // undefined
console.log(c[0]); //undefined
console.log(c[4]); //undefined