CoffeeScript 是不是支持单引号字符串中的插值?

Posted

技术标签:

【中文标题】CoffeeScript 是不是支持单引号字符串中的插值?【英文标题】:Does CoffeeScript support interpolation in single quotation string?CoffeeScript 是否支持单引号字符串中的插值? 【发布时间】:2012-08-18 12:25:36 【问题描述】:

我来问这个问题:

 f = (param) ->
      console.info '#param'
 f(1)

结果是#param

当我用双引号将字符串括起来时,这只是打印1。我也在 Ruby 中测试过它,它的行为是一样的。但这与 CoffeeScript.org 中的规则相矛盾:

CoffeeScript 的黄金法则是:“它只是 JavaScript”。

因为我认为在javascript中,单引号和双引号是平等对待的。而且我不经常使用 Ruby。谁能解释一下为什么?

非常感谢。

【问题讨论】:

这只是一条黄金法则,它以 JavaScript 结束 up,这并不意味着它在 CoffeeScript 源代码级别列出 JavaScript。到处都是魔法。 【参考方案1】:

来自CoffeeScript documentation:

CoffeeScript 中包含 Ruby 风格的字符串插值。 双引号字符串允许使用 # ... 进行插值, 和单引号字符串是文字。

【讨论】:

除了单引号字符串 不是 真的像在 Ruby 中那样。在 Javascript 中,单引号字符串的作用类似于双引号字符串,并将反斜杠解释为 \n 等的转义字符,需要对实际的反斜杠进行转义。 Coffeescript 延续这种行为的原因我不清楚。【参考方案2】:

“它只是 javascript”意味着它从根本上编译为普通的 JavaScript,并且不会尝试采用完全不同的编程范式并将其编译为 JavaScript。 CoffeeScript 主要关注的是避免“不好的部分”、样板和不必要的语法,而不是引入完全不同的基本结构,例如数据类型等。

JavaScript 没有字符串插值。 CoffeeScript 为方便起见从 Ruby 中引入了这一点。为单引号禁用它只是为您提供了一种在不解释插值的情况下获取字符串的干净方法。

不要将 It's just JavaScript 理解为 It IS JavaScript。这是一种风味/变体/兄弟姐妹。

【讨论】:

不像红宝石插值字符串(双引号)与文字字符串(单引号)编译到JavaScript作为字符串。因此没有 runtime 开销。可能存在编译时间开销。然而,在 ruby​​ 中,性能差异是如此微不足道,以至于使用 single 与 double 更多的是个人风格/偏好而不是性能。 “JavaScript 没有字符串插值”。它终于在 es6 developer.mozilla.org/en/docs/Web/JavaScript/Reference/… 中实现了 :)

以上是关于CoffeeScript 是不是支持单引号字符串中的插值?的主要内容,如果未能解决你的问题,请参考以下文章

单引号是不是将反斜杠视为 bash 脚本中的特殊字符?

为啥'char'值必须有单引号而不是双引号? [复制]

字符串类型

使用双引号而不是单引号返回 Python 列表中的变量

php中单引号和双引号的区别,哪个速度更快?为啥?

C和C++中单引号和双引号的用法?