ES6模板字符串和自动分号插入

时间:2017-02-03 23:44:00

标签: javascript ecmascript-6

请考虑以下代码:

`abc`.split(`b`)
`abc`.split(`b`)

此操作因TypeError: "abc".split(...) is not a function

而失败

Try it here.

为了使它工作,我们需要在这两个语句之间插入分号。 如果我们在第二行使用常规字符串,代码也能正常工作:

`abc`.split(`b`)
"abc".split(`b`)

这种行为的原因是什么?

我想它与自动分号插入做了一些糟糕的事情有关,但我无法弄清楚它会是什么。
事实上,常规字符串和模板字符串之间似乎存在差异,这让我很困惑。那些不相同吗?

1 个答案:

答案 0 :(得分:6)

模板文字可以是tagged with a function,字符串文字不能。注意

tag`a ${x} b`;

基本等同于

tag("a ", x, " b");

由于您的表达式`abc`.split(`b`) `abc`.split(`b`)在语法上有效,因此此处发生了no automatic semicolon insertion。不要在必要时省略分号。这并不是说ASI做的很糟糕,它只是在你期望的时候什么都不做。

如果你想省略分号并让它们自动插入到需要可能的地方,那么你([的每一行都会need to put one at the begin },/+-`

相关问题