高级模板字符串拆分
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() === ""
.
我刚刚发现这种拆分字符串的方式非常酷,但我不确定它为什么有效,谁能向我解释一下。 .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() === ""
.