高级模板字符串拆分

Advanced template string splitting

我刚刚发现这种拆分字符串的方式非常酷,但我不确定它为什么有效,谁能向我解释一下。 .split`` 而不是 .split("")

let str = "Justin"
console.log(str.split``) 
// ["J", "u", "s", "t", "i", "n"]

这是tagged templates的结果,str.split被视为模板的标签(``),因此以空字符串作为第一个参数调用。

let str = "Justin"
console.log(str.split``)

是一个tagged template,相当于:

let str = "Justin"
const strings = Object.freeze(Object.assign([""], { raw: [""] }))
console.log(str.split(strings))

这是有效的,因为 String.prototype.split(separator[, limit]) will convert the separator to a string in §21.1.3.21 step 7 if it doesn't implement the Symbol.split 方法(在第 2 步中检查)和 [""].toString() === "".