【问题标题】:changing string delimiters to backticks : possible impact?将字符串分隔符更改为反引号:可能的影响?
【发布时间】:2016-12-05 18:57:29
【问题描述】:

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。

【问题讨论】:

  • 这样的事情怎么样: var message = "你好,我是 Mike,很高兴认识你"。那会是“你好,我是迈克,很高兴认识你”吗?
  • @SariRahal OP 询问关于替换引号 around 字符串。
  • 我是否可以建议您使用解析器来处理代码,而不是考虑使用搜索和替换来处理它? esprima.org 应该有你需要的所有功能。
  • @Siorki,看看Tagged template literals,尤其是Raw Strings 功能。这与单引号或双引号有显着差异。
  • @Thomas,这些 - 连同表达式插值 - 是我只打算用 ` 替换 ' 或 " 的原因,而不是相反。模板文字有太多新功能,普通的旧引号不支持。

标签: javascript string syntax ecmascript-6 template-literals


【解决方案1】:

您可以查看string literals和no-substitution-templates的语法。
除了您已经提到的` 与' 与" 以及${ 的特殊含义之外,这两种形式之间只有换行符不同。我们可以忽略换行符(“转义的换行符”),因为您的压缩器无论如何都会将它们剥离,但是普通换行符在模板内是有效的,而不是在字符串文字内,所以如果你来回转换你必须关心那些好。如果您的字符串文字包含\n,您甚至可以使用它们来保存另一个字节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 2014-03-04
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    相关资源
    最近更新 更多