javascript - js是如何判断代码块和对象的?
大家讲道理
大家讲道理 2017-04-11 10:33:55
[JavaScript讨论组]

看上图的结果。第一个测试表示代码块。a:1可以理解为js保留的goto写法。

所以看到的不加括号的,都是被解释为了代码块。
加上个括号就被解释为了对象。

按照我的理解。
为表达式加上括号代表立即执行。
为语句加上括号 仅代表分组操作符。

初步理解 代码块是无法加括号的,所以此处自动解释为了对象?
以上的结论与我一直以来的理解所违背。

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(3)
巴扎黑

其实问题是在于{}的语法二意性。
你在控制台里输入{a:1}[1]的时候,{}并不是对象字面量的语法,而是block,类似于这种

{
    // a是一个label
    a:
      1;
};
[1];

如果{}前面没有其他符号,就会被当成block语法,代表开一个新的作用域。

你的{a:1,}[]代码被解析成这样:

{
    // label
    a:
        1,
};

[];

很明显语法错误。

黄舟

你可以生成语法树自己看看。

PHP中文网

所有的括号里的内容都是表达式. 加个括号是为了将这个代码段变成表达式, 或者提高运算符优先级. 并不是你说的什么立即执行.

一定要回避一个问题: 靠自己的瞎想去钻一些牛角尖.

直接用{}会被解释为代码块而不是对象, 这个是javascript这个语言本身决定的特性,

解释器就是这么设计的, 你再往下深究又有什么意义?

我现在就记住一个: 直接写{}会被解释为代码块, 所以要加个括号.

那你现在就算再花二十个小时研究这个问题, 能比我好多少? 相信我, 有的东西是需要沉淀才能看懂的, 你的代码量不到哪里, 没遇到过那种场景, 无论你怎么研究都是扯淡!

我把这二十个小时拿来写代码, 能写好多了呢.

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

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