javascript - 一个不理解的问题
迷茫
迷茫 2017-04-11 10:53:20
[JavaScript讨论组]
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(7)
PHP中文网

大括号在js中有两种含义,一个是对象字面量,还有一个就是代码块
对象字面量存在于表达式中,所以当该语句按照表达式方式解析的时候,大括号就会被当作是对象字面量
怎样才能被识别为表达式呢?
只要当前语句含有运算符就行了,含有运算符的语句一定是表达式。

就比如你上面的那段。含有=运算符,那么这个大括号就被当作对象字面量了。
还有就是JSON形式的大括号也会当作对象字面量来解释。比如:

var ss = {x:1}["x"];
console.log(ss);    //1

除开这两种方式之外,大括号都会被当作是代码块

在你下面的语句中,大括号之间啥都没有,其实就相当于是空的。
{}[0]直接等效于[0]

想要{}[0]中的大括号按照对象来解析,加上对运算结果没有影响的运算符就行了:

({}[0])

最后再提几句,[]也是运算符(成员访问运算符)啊,为什么{}[0]没有按照表达式方式解析呢。
因为[]也是有两个意思的,一个就是刚才提到的访问成员运算符,还有一个是数组字面量

上面提到了,在语句中没有运算符时,{}被当作了代码块,所以{}[0]是等效于[0]的,这是从效果上说的,从语句形式上来说,等效成这样{};[0]更为准确点。
这样就能很明显的看到,[0]是独立成为一个语句的,当然只能当作是数组字面量了。
{}[0]返回的那个数组,就是这个语句右边那个数组。

巴扎黑

{}被识别为代码块了吧

ringa_lee

所以在 log {}["111"] 不是{}的值而是没有赋值操作的{}(代码块). 输出的是数组

高洛峰

{}是指代码块。
代码块旁边有某些东西(除了if else等等..),都被理解为对象。
({})也被理解为对象

大家讲道理

因为{}是识别为语句块的。。

迷茫

是我打开方式不对吗?为什么我这里
{}[0] //undefined
{}['0'] //undefined
{}['asdf'] //undefined

PHP中文网

其实{}[0]这种写法与{};[0]这种写法是一样的,而

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

在这里,map不是单纯的就替代为{},而会根据后面的[]尝试将其解析为一个数组。
我也是初学者,无法给答主说清楚其间的细节。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号