我在Chrome(和FF)控制台上尝试了一些东西,并意识到JS REPL以令人惊讶的方式评估了一些表达式:
{} "123"
-> "123"
{} 123
-> 123
{} []
-> []
等
为什么?此外,与以前的行为有些不一致:
{}{}
-> undefined
这些是有效表达的事实背后的逻辑是什么?
答案 0 :(得分:9)
{} "123"
与{}; "123";
相同,后者生成最后一个表达式("123"
)的值。
{}
可以是对象文字或块。如果{}
未被隐式地视为对象文字(没有赋值或没有键值对......),则解释器会将其解析为块。
{}{}
与:
{
// block with no expressions
};
{
// block with no expressions
};
产生undefined
,这是空块的值。