alert`1`
为什么这个Payload中可以用反引号代替括号。
ES2015规范的先前版本中被称为模板字符串
。
允许嵌入表达式的字符串字面量。可以使用多行字符串和字符串插值功能。
模板字符串的诞生极大的方便了字符串的拼接,可以认为是一种字符串拼接方法。
模板字符串使用反引号来代替普通字符串中的单引号和双引号。
模板字符串使用 ${expression}
作为占位符。
如果一个模板字符串由一个函数名开头,则该字符串被称为带标签的模板字符串,函数会在模板字符串处理后被调用。
模板字符串的一些用途
普通字符串
`string text`
多行字符串
`string text line 1
string text line 2`
在输出多行字符串时,空白字符会被保留,原样输出。
字符串插值
`string text ${expression} string text`
`你好,我是 ${233 + 1}!` // => 你好,我是 234!
demo = 'TEag1e';
`你好,我是 ${demo} !` // => 你好,我是 TEag1e !
带标签的模板字符串
tag `string text ${expression} string text`
该标签通常是一个函数,它会在模板字符串处理结束后被调用。
需要注意的是,标签函数的第一个参数是一个包含字符串的数组。标签的第二个参数是第一个表达式的值,第三个参数是第二个表达式的值。
function tag(string, exp){}
tag`Hello ${expression} World `
上面这种情况,string参数是一个数组,数组第一个元素是 Hello
,第二个元素是World
,exp参数则是 expression
的结果。
String.raw()
String.raw方法用来充当模板字符串的处理函数,返回模板字符串最终的处理结果的原生形式。
demo = 123;
String.raw`你好,结果是:\n${demo + 123}`;
// => 你好,结果是:\n246
`你好,结果是:\n${demo + 123}`;
// => 你好结果是:
// 236
相关文档
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/template_strings