一个不理解的问题

var map = {};map[0] // undefinedmap['0'] //undefinedmap['asdf'] //undefined

上面代码是正常,但下面这段代码并不理解

{}[0] //[0]
{}['0'] //["0"]
{}['asdf'] //["asdf"]

求解惑


莫回无
浏览 442回答 1
1回答

饮歌长啸

大括号在js中有两种含义,一个是对象字面量,还有一个就是代码块。对象字面量存在于表达式中,所以当该语句按照表达式方式解析的时候,大括号就会被当作是对象字面量。怎样才能被识别为表达式呢?只要当前语句含有运算符就行了,含有运算符的语句一定是表达式。就比如你上面的那段。含有=运算符,那么这个大括号就被当作对象字面量了。还有就是JSON形式的大括号也会当作对象字面量来解释。比如:var ss = {x:1}["x"];console.log(ss);    //1除开这两种方式之外,大括号都会被当作是代码块。在你下面的语句中,大括号之间啥都没有,其实就相当于是空的。{}[0]直接等效于[0]。想要{}[0]中的大括号按照对象来解析,加上对运算结果没有影响的运算符就行了:({}[0])最后再提几句,[]也是运算符(成员访问运算符)啊,为什么{}[0]没有按照表达式方式解析呢。因为[]也是有两个意思的,一个就是刚才提到的访问成员运算符,还有一个是数组字面量。上面提到了,在语句中没有运算符时,{}被当作了代码块,所以{}[0]是等效于[0]的,这是从效果上说的,从语句形式上来说,等效成这样{};[0]更为准确点。这样就能很明显的看到,[0]是独立成为一个语句的,当然只能当作是数组字面量了。{}[0]返回的那个数组,就是这个语句右边那个数组。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript