这个问题实际上是另一个question的结果,为此我做了一些实验,结果让我更加困惑。我期待着解释内部实际发生的答案。JavaScript变量赋值令人惊讶
我曾尝试是,
我一直以此为基础估计,因为我得到了一些明确的解释 here,
var a = [];
a['a1'] = [];
a['a2'] = [];
console.log(a); // []
console.log(a['a1']); // []
console.log(a['a2']); // []
TEST 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
TEST 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
我的问题是,为什么这些赋值的行为不同,而变量共享一些共同的功能?
这里是demo
谁能请给我什么实际发生的内部一个明确的解释吗?
额外测试
那么,如果我用数值转让尝试,它的行为完全不同的形成这两个。
var c = 1234;
c[4] = [];
console.log(c); //1234
console.log(c.length); // undefined
console.log(c[0]); //undefined
console.log(c[4]); //undefined
你假定一个字符串是一个字符数组。这不是,所以你从这个假设中得到的任何东西都不会起作用。 – JJJ 2012-08-15 16:26:17
@Juhana完全没有,假设,可以被视为一个字符数组,因为结果混淆。 – 2012-08-15 17:23:21