【问题标题】:Why can't I assign an empty code block to a variable in Javascript?为什么我不能将空代码块分配给 Javascript 中的变量?
【发布时间】:2019-03-04 20:25:11
【问题描述】:

我正在使用 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,我们希望上述分配有效。

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

【问题讨论】:

  • “空代码块”根本不是可以分配的值。你当然可以做一个函数
  • 实际目标是什么???
  • @Pointy 我在想,由于代码块评估为代码块中最后一个表达式的评估结果,并且一个空代码块似乎评估为未定义(这本身似乎很直观),它应该能够以这种方式存储在变量中
  • @epascarello 有趣和好奇
  • 您将 控制台 的操作与 JavaScript 代码的实际工作方式混淆了。 { 在需要表达式时开始一个对象字面量,当它是语句中的第一个标记时它开始一个代码块。

标签: javascript v8


【解决方案1】:

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

这主要取决于{之前,而不是之后。

由于前面有一个=,因此您处于{ 是对象字面量开头的上下文中。在需要属性名称的地方不允许使用;,因此代码错误。

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

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

不,它没有:

var codeBlockValue = {1;2;3}; 

【讨论】:

  • 你说=的存在意味着它将被解释为一个对象字面量。然后说你不能分配块。这两个似乎都明显是错误的。例如var codeBlockValue = {1;2;3}; 工作得很好,并将codeBlockValue 设置为3
  • @seisvelas 但该代码是语法错误;它不会将变量设置为任何值。
  • 老兄!我完全错过了!我可以发誓我试过了。哇,谢谢大家!
猜你喜欢
  • 2017-01-16
  • 1970-01-01
  • 2014-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-28
相关资源
最近更新 更多