将字符串定界符更改为反引号:可能的影响?
changing string delimiters to backticks : possible impact?
ES6 引入 template strings 由反引号分隔 `
。
在哪些情况下用反引号替换字符串周围的单引号 '
或双引号 "
会产生不同的结果,否则是不安全的?
作为操作的一部分执行代码内现有反引号的转义。
// before
var message = "Display backtick ` on screen";
// after
var message = `Display backtick \` on screen`;
我知道任何包含 ${...}
的字符串都会失败,因为它会被(错误)解释为占位符。还有其他相关模式吗?
上下文:这是针对自动处理输入代码的development of a JS compression tool。后者及其包含的字符串是用户提供的,因此我无法控制其内容。唯一可以做出的假设是它是有效的 Javascript.
执行环境可以通过任何最新的浏览器或Node.js。
您可以检查string literals and no-substitution-templates的语法。
除了 `
与 '
与 "
以及您已经提到的 ${
的特殊含义外,两种形式之间只有换行符不同。我们可以忽略续行符 ("escaped linebreaks"),因为你的压缩器无论如何都会将它们去掉,但是普通换行符在模板内有效,而不是在字符串文字内,所以如果你来回转换,你将不得不关心那些以及。如果您的字符串文字包含 \n
.
,您甚至可以使用它们来保存另一个字节
ES6 引入 template strings 由反引号分隔 `
。
在哪些情况下用反引号替换字符串周围的单引号 '
或双引号 "
会产生不同的结果,否则是不安全的?
作为操作的一部分执行代码内现有反引号的转义。
// before
var message = "Display backtick ` on screen";
// after
var message = `Display backtick \` on screen`;
我知道任何包含 ${...}
的字符串都会失败,因为它会被(错误)解释为占位符。还有其他相关模式吗?
上下文:这是针对自动处理输入代码的development of a JS compression tool。后者及其包含的字符串是用户提供的,因此我无法控制其内容。唯一可以做出的假设是它是有效的 Javascript.
执行环境可以通过任何最新的浏览器或Node.js。
您可以检查string literals and no-substitution-templates的语法。
除了 `
与 '
与 "
以及您已经提到的 ${
的特殊含义外,两种形式之间只有换行符不同。我们可以忽略续行符 ("escaped linebreaks"),因为你的压缩器无论如何都会将它们去掉,但是普通换行符在模板内有效,而不是在字符串文字内,所以如果你来回转换,你将不得不关心那些以及。如果您的字符串文字包含 \n
.