【问题标题】: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。到处都是魔法。

标签: javascript ruby coffeescript


【解决方案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/… 中实现了 :)
猜你喜欢
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多