
看上图的结果。第一个测试表示代码块。a:1可以理解为js保留的goto写法。
所以看到的不加括号的,都是被解释为了代码块。
加上个括号就被解释为了对象。
按照我的理解。
为表达式加上括号代表立即执行。
为语句加上括号 仅代表分组操作符。
初步理解 代码块是无法加括号的,所以此处自动解释为了对象?
以上的结论与我一直以来的理解所违背。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
其实问题是在于{}的语法二意性。
你在控制台里输入
{a:1}[1]的时候,{}并不是对象字面量的语法,而是block,类似于这种如果{}前面没有其他符号,就会被当成block语法,代表开一个新的作用域。
你的
{a:1,}[]代码被解析成这样:很明显语法错误。
你可以生成语法树自己看看。
一定要回避一个问题: 靠自己的瞎想去钻一些牛角尖.
直接用{}会被解释为代码块而不是对象, 这个是javascript这个语言本身决定的特性,
解释器就是这么设计的, 你再往下深究又有什么意义?
我现在就记住一个: 直接写{}会被解释为代码块, 所以要加个括号.
那你现在就算再花二十个小时研究这个问题, 能比我好多少? 相信我, 有的东西是需要沉淀才能看懂的, 你的代码量不到哪里, 没遇到过那种场景, 无论你怎么研究都是扯淡!
我把这二十个小时拿来写代码, 能写好多了呢.