请考虑以下代码:
`abc`.split(`b`)
`abc`.split(`b`)
此操作因TypeError: "abc".split(...) is not a function
为了使它工作,我们需要在这两个语句之间插入分号。 如果我们在第二行使用常规字符串,代码也能正常工作:
`abc`.split(`b`)
"abc".split(`b`)
这种行为的原因是什么?
我想它与自动分号插入做了一些糟糕的事情有关,但我无法弄清楚它会是什么。
事实上,常规字符串和模板字符串之间似乎存在差异,这让我很困惑。那些不相同吗?
答案 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 },/
,+
,-
或`
。