javascript - 在可观察笔记本中创建对象文字失败
问题描述
我正在尝试在 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
解决方案
Blex 指出,要使其工作,您需要将对象包装在括号中:
tahoe = ({
resorts: ["Kirkwood","Squaw","Alpine"],
print: function(delay=1000) {
setTimeout(() => {
console.log(this.resorts.join(", "))
}, delay)
}
})
工作片段。
要更全面地解释为什么会这样,请参阅这篇博文,其中概述了 Observable 和 vanilla javascript 之间的区别:
语句需要花括号,并返回(或屈服)。单元格体可以是简单的表达式,例如数字或字符串文字,或函数调用。但有时您需要语句,例如 for 循环。为此,您需要花括号和返回语句来为单元格赋值。将单元格视为一个函数,但该函数没有参数。出于同样的原因,您需要将对象字面量括在括号中,或者使用带有返回的块语句。
在单元格的播放按钮图标旁边还有一个(有点难以看到)魔术棒小部件,如果您单击它,它将自动修复此问题:
推荐阅读
- node.js - JS - Laravel Mix/NPM.js:变量 twemoji.parse 未找到/未定义
- go - 为什么gorm 没有在日志中报告插入错误?
- php - 如何在 Symfony 2 中全局更改 Monolog 的默认日期时区?
- c++ - 如何在 Visual Studio 中跳过 Debug Assertion Failed 并直接中断
- android - 如何将图像视图的边框与背景混合?
- c# - 返回正确格式化的时间
- html - 如何控制导航栏间距?
- python - 在其他方法定义中调用方法并且“对象没有属性”
- logic - 谓词逻辑量词和括号
- python - 在 Python 3 中迭代数组