论坛首页 Web前端技术论坛

Javascript中大括号“{}”的多义性

浏览 13449 次
该帖已经被评为良好帖
作者 正文
   发表时间:2010-06-08  
恩 说的不错
这里也有写关于Js的资料
AJAX中JavaScript类的三种成员
0 请登录后投票
   发表时间:2010-07-02  
正在被function(){}()纠结
function(){}()//报错
void function(){}()//不会报错
var fn=function(){}()//不会报错

0 请登录后投票
   发表时间:2011-02-06  
整个是个赋值语句,其中的{name:'jack',age:23}是个表达式,单独存在也不会出现语法错误的。
====“单独存在”的说法是有问题的,应该说需要表达式出现的地方,这个对象直接量都可以放在这个地方,不会出现语法错误,但是可能出现运行时错误,比如"delete {};"

function(){}(),大括号被理解成复合语句,自然前面的function()声明函数的语法不完整导致语法分析期出错。
====理解错误,应该是"function(){}"被解析为一个函数声明,然后重新进入语句解析状态,便无法继续解析后面的"()"了,导致语法分析报错。

{}.constructor,大括号被理解成复合语句,大括号后面是点运算符,点运算符前没有合理的对象自然也报错
====理解不完全正确,"{}"被解析为复合语句没错,然后"."被解析成点运算符和后面的都错了。复合语句之后,重新进入语句解析状态(如你所说的"语句优先"),"."不可能作为点运算符作为语句的开始,实际上是作为没有整数部分的Number的小数点而解析了,继续解析遇到非数字的字母c(constructor的第一个字母),然后报错。可以测试"{}.123;"是没有问题的。
0 请登录后投票
   发表时间:2011-02-07   最后修改:2011-02-09
谢谢wmingjian。

1,整个是个赋值语句,其中的{name:'jack',age:23}是个表达式,单独存在也不会出现语法错误的。
已修改

2,function(){}(),大括号被理解成复合语句,自然前面的function()声明函数的语法不完整导致语法分析期出错。

你认为"function(){}"被解析为一个函数声明,既然是函数声明后面的()是函数调用理应不会报错。事实却报错。为何? 或者有无其它方式来证明。

3,{}.constructor,大括号被理解成复合语句,大括号后面是点运算符,点运算符前没有合理的对象自然也报错

完全认同您的观点。

测试{}.123的确没问题。

{}.123等价于

{}
.123

等价于

{}
0.123

0 请登录后投票
   发表时间:2011-02-08  
总有那么不知道的,今天学习了!
0 请登录后投票
   发表时间:2011-02-10  
这种文章不错,,平时就是表面东西,,里面还真没看多少~~~
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics