扫码关注官方订阅号
业精于勤,荒于嬉;行成于思,毁于随。
大括号在js中有两种含义,一个是对象字面量,还有一个就是代码块。对象字面量存在于表达式中,所以当该语句按照表达式方式解析的时候,大括号就会被当作是对象字面量。怎样才能被识别为表达式呢?只要当前语句含有运算符就行了,含有运算符的语句一定是表达式。
对象字面量
代码块
就比如你上面的那段。含有=运算符,那么这个大括号就被当作对象字面量了。还有就是JSON形式的大括号也会当作对象字面量来解释。比如:
=
var ss = {x:1}["x"]; console.log(ss); //1
除开这两种方式之外,大括号都会被当作是代码块。
在你下面的语句中,大括号之间啥都没有,其实就相当于是空的。{}[0]直接等效于[0]。
{}[0]
[0]
想要{}[0]中的大括号按照对象来解析,加上对运算结果没有影响的运算符就行了:
({}[0])
最后再提几句,[]也是运算符(成员访问运算符)啊,为什么{}[0]没有按照表达式方式解析呢。因为[]也是有两个意思的,一个就是刚才提到的访问成员运算符,还有一个是数组字面量。
[]
访问成员运算符
数组字面量
上面提到了,在语句中没有运算符时,{}被当作了代码块,所以{}[0]是等效于[0]的,这是从效果上说的,从语句形式上来说,等效成这样{};[0]更为准确点。这样就能很明显的看到,[0]是独立成为一个语句的,当然只能当作是数组字面量了。{}[0]返回的那个数组,就是这个语句右边那个数组。
{}
{};[0]
{}被识别为代码块了吧
所以在 log {}["111"] 不是{}的值而是没有赋值操作的{}(代码块). 输出的是数组
{}是指代码块。代码块旁边有某些东西(除了if else等等..),都被理解为对象。({})也被理解为对象
因为{}是识别为语句块的。。
是我打开方式不对吗?为什么我这里{}[0] //undefined{}['0'] //undefined{}['asdf'] //undefined
其实{}[0]这种写法与{};[0]这种写法是一样的,而
var map = {}; map[0] // undefined map['0'] //undefined map['asdf'] //undefined
在这里,map不是单纯的就替代为{},而会根据后面的[]尝试将其解析为一个数组。我也是初学者,无法给答主说清楚其间的细节。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
大括号在js中有两种含义,一个是
对象字面量,还有一个就是代码块。对象字面量存在于表达式中,所以当该语句按照表达式方式解析的时候,大括号就会被当作是对象字面量。怎样才能被识别为表达式呢?
只要当前语句含有运算符就行了,含有运算符的语句一定是表达式。
就比如你上面的那段。含有
=运算符,那么这个大括号就被当作对象字面量了。还有就是JSON形式的大括号也会当作对象字面量来解释。比如:
除开这两种方式之外,大括号都会被当作是
代码块。在你下面的语句中,大括号之间啥都没有,其实就相当于是空的。
{}[0]直接等效于[0]。想要
{}[0]中的大括号按照对象来解析,加上对运算结果没有影响的运算符就行了:最后再提几句,
[]也是运算符(成员访问运算符)啊,为什么{}[0]没有按照表达式方式解析呢。因为
[]也是有两个意思的,一个就是刚才提到的访问成员运算符,还有一个是数组字面量。上面提到了,在语句中没有运算符时,
{}被当作了代码块,所以{}[0]是等效于[0]的,这是从效果上说的,从语句形式上来说,等效成这样{};[0]更为准确点。这样就能很明显的看到,
[0]是独立成为一个语句的,当然只能当作是数组字面量了。{}[0]返回的那个数组,就是这个语句右边那个数组。{}被识别为代码块了吧所以在 log {}["111"] 不是{}的值而是没有赋值操作的{}(代码块). 输出的是数组
{}是指代码块。
代码块旁边有某些东西(除了if else等等..),都被理解为对象。
({})也被理解为对象
因为{}是识别为语句块的。。
是我打开方式不对吗?为什么我这里
{}[0] //undefined
{}['0'] //undefined
{}['asdf'] //undefined
其实{}[0]这种写法与
{};[0]这种写法是一样的,而在这里,map不是单纯的就替代为{},而会根据后面的[]尝试将其解析为一个数组。
我也是初学者,无法给答主说清楚其间的细节。