這個問題實際上是另一個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