2016-10-24 142 views
-3

我有這樣的代碼:陣列和全局對象

var ui = ["one","two","three"]; 
ui.forEach(function(id) 
{ 
    ui[id] = "msg_all " + id 
}); 
console.dir(ui); 

爲什麼UI [0] == 「一」 時window.one == 「msg_all一個」

+0

@gra窗口是所有的JavaScript對象的基本範圍,它會自動「連接」來定義的,除非你在聲明之前使用「VAR」每個變量,在這種情況下,變量的作用域是本地(這意味着它包含在父函數中,否則就是全局的,如果你在函數塊之外聲明你的變量的話)。此外窗口被定義爲一個常量,那就是你不能重新定義窗口對象(你會得到一個錯誤,說「類型錯誤:重新聲明const窗口」)。 – Elangovan

+0

因爲ui [id]等於一個示例ui [「one」],所以window.one等於該消息 – Araz

+0

而ui是一個inde數組0 1 2 – Araz

回答

1

你錯誤地使用forEach函數,這個函數的第一個參數是每個迭代的項目,第二個參數是索引。

var ui = ["one","two","three"]; 
ui.forEach(function(item, index) 
{ 
    ui[index] = "msg_all " + item 
}); 
console.dir(ui); 
+0

不,這是很好的例子。我知道第二個參數是第一個參數項目時的索引。但爲什麼當我運行console.dir我gest thos味精: [「one」,「two」,「three」] –

+0

[「one」,「two」,「three」] 0:「one」 1: 「二」 2: 「三」 之一: 「msg_all一個」 二: 「msg_all兩個」 三: 「msg_all三」 長度:3 __proto __:數組[0] 爲什麼呢? –

+0

'id'不是一個整數,爲什麼你直接在'ui'數組中使用它作爲索引? – Enix