为什么不能为Javascript中的变量分配空的代码块?

时间:2019-03-04 20:25:11

标签: javascript v8

我正在使用V8(通过Chrome)对此进行测试。在Javascript中,代码块的计算结果等于该代码块中最后一个值的计算结果。我想看看如果将变量分配给空代码块会发生什么情况。

// example of code block evaluating to last value in the block
> {1;2;3};
3

// This won't work, it returns an empty object,
// not an empty code block.
> var emptyBlock = {};
> emptyBlock;
Object object

最终,我弄清楚了如何指定我想要一个空的代码块,而不是一个空的对象。

> {;}
undefined

> {;;}
undefined

> {;;;;;}
undefined

好的,很漂亮,所以一个空的代码块解析为undefined。对?

不完全是!

> var emptyBlock = {;}
Uncaught SyntaxError: Unexpected token ';'

?!现在还不清楚空代码块是否实际上返回undefined,还是完全起作用。如果仅对undefined求值,则我们希望上面的分配起作用。

有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:6)

  

最终,我弄清楚了如何指定我想要一个空的代码块,而不是一个空的对象。

这很大程度上取决于{之前,而不是之后{

由于前面有一个=,因此您所处的上下文中{是对象文字的开始。不允许使用;来指定属性名称,因此代码错误。

您不能分配块。它们不是值,它们是代码结构的一部分。

  

这两个似乎都是错误的。 var codeBlockValue = {1; 2; 3};例如工作得很好,并将codeBlockValue设置为3

不,不是:

var codeBlockValue = {1;2;3};