莫回無
2018-10-04 10:33:15
var map = {};map[0] // undefinedmap['0'] //undefinedmap['asdf'] //undefined上面代碼是正常,但下面這段代碼并不理解{}[0] //[0]
{}['0'] //["0"]
{}['asdf'] //["asdf"]求解惑
1 回答

飲歌長嘯
TA貢獻1951條經(jīng)驗 獲得超3個贊
大括號在js中有兩種含義,一個是對象字面量
,還有一個就是代碼塊
。對象字面量
存在于表達式中,所以當該語句按照表達式方式解析的時候,大括號就會被當作是對象字面量
。
怎樣才能被識別為表達式呢?
只要當前語句含有運算符就行了,含有運算符的語句一定是表達式。
就比如你上面的那段。含有=
運算符,那么這個大括號就被當作對象字面量
了。
還有就是JSON形式的大括號也會當作對象字面量來解釋。比如:
var ss = {x:1}["x"];console.log(ss); //1
除開這兩種方式之外,大括號都會被當作是代碼塊
。
在你下面的語句中,大括號之間啥都沒有,其實就相當于是空的。{}[0]
直接等效于[0]
。
想要{}[0]
中的大括號按照對象來解析,加上對運算結果沒有影響的運算符就行了:
({}[0])
最后再提幾句,[]
也是運算符(成員訪問運算符)啊,為什么{}[0]
沒有按照表達式方式解析呢。
因為[]
也是有兩個意思的,一個就是剛才提到的訪問成員運算符
,還有一個是數(shù)組字面量
。
上面提到了,在語句中沒有運算符時,{}
被當作了代碼塊,所以{}[0]
是等效于[0]
的,這是從效果上說的,從語句形式上來說,等效成這樣{};[0]
更為準確點。
這樣就能很明顯的看到,[0]
是獨立成為一個語句的,當然只能當作是數(shù)組字面量
了。{}[0]
返回的那個數(shù)組,就是這個語句右邊那個數(shù)組。
添加回答
舉報
0/150
提交
取消