首页 > 解决方案 > 在可观察笔记本中创建对象文字失败

问题描述

我正在尝试在 Observable 笔记本 ( https://observablehq.com/ ) 中运行 O'Reilly 的“Learning React”书中的这个简单代码片段。

如果我在 Chrome 控制台中运行它(我可以定义对象然后运行tahoe.print()),它就可以工作,但是如果我尝试在 Observable 中运行它,我会SyntaxError: Unexpected Token在运行单元格时得到。

Observable 有什么奇怪的地方阻止我创建这样的对象字面量吗?

tahoe = {
  resorts: ["Kirkwood","Squaw","Alpine"],
  print: function(delay=1000) {
    setTimeout(() => {
      console.log(this.resorts.join(", "))
    }, delay)
  }
}

这是带有代码的笔记本:https ://observablehq.com/@jritch/simple-snippet-breaks-in-observable

标签: javascriptobject-literal

解决方案


Blex 指出,要使其工作,您需要将对象包装在括号中:

tahoe = ({
  resorts: ["Kirkwood","Squaw","Alpine"],
  print: function(delay=1000) {
    setTimeout(() => {
      console.log(this.resorts.join(", "))
    }, delay)
  }
})

工作片段

要更全面地解释为什么会这样,请参阅这篇博文,其中概述了 Observable 和 vanilla javascript 之间的区别

语句需要花括号,并返回(或屈服)。单元格体可以是简单的表达式,例如数字或字符串文字,或函数调用。但有时您需要语句,例如 for 循环。为此,您需要花括号和返回语句来为单元格赋值。将单元格视为一个函数,但该函数没有参数。出于同样的原因,您需要将对象字面量括在括号中,或者使用带有返回的块语句。

在单元格的播放按钮图标旁边还有一个(有点难以看到)魔术棒小部件,如果您单击它,它将自动修复此问题:

https://i.imgur.com/uf5H1LA.png


推荐阅读