2017-07-07 163 views
-1

以下代碼段通過混合括號和方括號來賦予某些值而沒有任何錯誤,但大多數其他組合(例如方括號內的括號)完全不起作用。在數組初始化中混合圓括號和方括號

var myItems = []; 
myItems[5] = ("A1", "B1", ["C1","C2","C3"]); 

當我打印這些值時,它們在兩個不同的瀏覽器中完全相同。

myItems[5]: C1,C2,C3 
myItems[5][0]: C1 
myItems[5][1]: C2 
myItems[5][2]: C3 
myItems[5][2][0]: C 
myItems[5][2][1]: 3 
myItems[5][2][2]: undefined 

似乎只考慮方括號內的部分。這個結果是由JavaScript標準(ECMA-262)定義的嗎?還是僅僅是解釋器/引擎(我的案例中的Chrome和Firefox)在非法使用時所做的?

Here是我的小提琴。

編輯:我知道正確使用括號(我的小提琴已經有了它),但我問的結果是否是這樣一個錯誤的使用確定性。由於我嘗試過的口譯員不會產生任何錯誤並給出相同的結果,所以我想知道這些結果是否由標準保證,並且/或者所有其他口譯員是否也會這樣做。

+0

[有,你,[嘗試,使用],[方括號]] –

+0

是的,我知道這一點,但實際上我沒有問到正確的用法是什麼。 – ahmedus

回答

2

從​​

逗號運算符的每個操作數的(從左至右) 並返回最後一個操作數的值。

所以

myItems[5] = ("A1", "B1", ["C1","C2","C3"]); 

打開到

myItems[5] = (["C1","C2","C3"]); 

現在,你也得爲自己6個元素(5X不確定和三根弦你第六位分配的數組)的數組。

而這正是你打印出來的。

+0

這並沒有真正回答問題 –

+1

讀取逗號分隔符會顯示它返回最後一個操作數的值,並且將數組包裝在括號中什麼也不做。 – destoryer

+0

我覺得這個問題不好理解。請參閱問題的編輯部分。 @destoryer:如果你的評論證明了爲什麼最後的操作數被返回,那麼它將更接近成爲一個答案。 – ahmedus

1

逗號運算符,「評估它的每個操作數(從左到右)並返回最後一個操作數的值。」 (可以採取quote from Mozilla作爲福音,或try to decipher what ECMA has to say on the matter。)

分組操作者()「控制評價在表達的優先級,」根據Mozilla。 (Obligatory link to ECMA

在這種情況下,分組操作符基本上什麼都不做,因爲只有一個表達式被分組。所以這是一個簡單的以逗號分隔的值列表,最後一個是數組。這是分配的。


逗號運算符經常在批量指定變量時看到,例如, var foo = 1, bar = 2, baz = 3;該規範指出,即使只返回最後一個項目,也必須評估每個項目「,因爲它可能具有可觀察到的副作用。」 在這種最常見的用例中,每個變量都具有賦值給它們的值。