0

我最近开始使用 CoffeeScript 的三引号语法在 JavaScript 中转义 html 而不是 RoR 的escape_javascript(). 但我想知道在切换之前我应该​​知道两者之间是否有任何重大差异。

一个比另一个有什么好处吗?

4

1 回答 1

3

CoffeeScript 中的三引号不会转义任何东西,它们只是处理插值,去掉一些前导空格,并将嵌入的换行符转换为\n; 当然,escape_javascript也不对 H​​TML 做任何事情。例如:

s = """
    <p>
        Pancakes & stuff!
        'single quotes'
        "double quotes"
    </p>
"""

变成:

var s;
s = "<p>\n    Pancakes & stuff!\n    'single quotes'\n    \"double quotes\"\n</p>";

单引号在双引号字符串中没有任何意义,所以 CoffeeScript 对它们什么都不做,但是双引号被转义了。但是,嵌入的三引号将被解释为三引号字符串的结尾,因此,如果您的 ERB 出现在您的 CoffeeScript 到 JavaScript 转换之前,您可能会遇到一些麻烦。

我建议不要放弃escape_javascript将原始字符串放入 CoffeeScript 三引号字符串中。如果您真的想使用三引号字符串,那么您将同时执行以下操作:

s = """<%=j @s %>"""

但这将是毫无意义的使用"""since"""并且escape_javascript做几乎相同的事情(当然"""会被嵌入式混淆""")。

于 2012-07-15T19:34:04.983 回答