【发布时间】:2012-08-11 23:18:00
【问题描述】:
这个问题实际上是另一个question 的结果,为此我做了一些实验,结果让我更加困惑。我期待能解释内部实际发生的事情的答案。
我试过的是,
我将此作为基本假设,因为我得到了一些明确的解释 here,
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
我的问题是,为什么这些赋值的行为不同,而变量共享一些共同的功能?
这里是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
【问题讨论】:
-
你假设一个字符串是一个字符数组。事实并非如此,因此您从该假设中得出的任何结果都不能保证有效。
-
@Juhana 根本不可以,假设,可以被视为一个字符数组,因为结果混淆了。
标签: javascript arrays variable-assignment