这个问题实际上是另一个问题的结果,为此我做了一些实验,结果让我更加困惑。我期待答案来解释内部实际发生的事情。
我试过的是,
我将此作为基本假设,因为我在这里得到了一些明确的解释 ,
var a = [];
a['a1'] = [];
a['a2'] = [];
console.log(a); // []
console.log(a['a1']); // []
console.log(a['a2']); // []
测试 1
这让我很困惑,因为它打印b[0]
为a
并且可以访问length
属性,我认为var b
可以被视为字符数组,因此我尝试分配另一个值,但最终没有成功。从基本假设来看,如果这个可以被视为一个 char 数组(更一般地作为一个数组),那么分配应该是成功的。它打破了基本假设。
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
我的问题是,为什么这些分配的行为不同,而变量共享一些共同的功能?
这是演示
谁能给我一个关于内部实际发生的事情的明确解释?
额外测试
然后,如果我尝试使用数字赋值,它的行为与这两者完全不同。
var c = 1234;
c[4] = [];
console.log(c); //1234
console.log(c.length); // undefined
console.log(c[0]); //undefined
console.log(c[4]); //undefined