2012-08-23 74 views
7

我來到了這個問題:CoffeeScript是否支持單引號字符串中的插值?

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

結果是#{param}

當我用雙引號中的字符串,只是打印1。我也在Ruby中測試過它,它的行爲是一樣的。但這只是與CoffeeScript.org中的規則相矛盾:

CoffeeScript的黃金法則是:「它只是JavaScript」。

因爲我認爲在JavaScript中,單引號和雙引號是平等對待的。我經常不使用Ruby。誰能解釋爲什麼?

非常感謝。

+1

這只是一個黃金法則,它結束* *作爲JavaScript,並不意味着它在CoffeeScript源代碼級別列出JavaScript。這裏有神奇的東西。 –

回答

11

「這只是javascript」意味着它從根本上編譯爲普通的JavaScript,並不試圖採用截然不同的編程範例並將其編譯爲JavaScript。 CoffeeScript主要關注避免「糟糕的部分」,樣板和不必要的語法,而不是引入根本不同的基本構造,如數據類型等。

JavaScript沒有字符串插值。爲了方便起見,CoffeeScript從Ruby中引入了這一點。禁用它的單引號只是給你一個乾淨的方式來獲得一個沒有插值解釋的字符串。

不要拿這只是JavaScript意思是它是JavaScript的。這是一種風味/變體/兄弟姐妹。

+0

與字符串(雙引號)與文字字符串(單引號)的* * ruby​​插值*不同*作爲字符串編譯爲JavaScript。因此沒有*運行時*開銷。可能會有編譯時間的開銷。然而,正如在紅寶石中,性能差異是如此微不足道,以至於使用單對雙是更個人風格/偏好然後表現。 – Sukima

+0

「JavaScript沒有字符串插值」。它終於在es6中完成了https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Template_literals :) – IonicBurger

13

CoffeeScript documentation

紅寶石風格的字符串插值包括在CoffeeScript的。 雙引號字符串允許插值,使用#{...}, 和單引號字符串是文字。

+3

除了單引號的字符串*不是真正的文字,因爲它們是在Ruby中。在Javascript中,單引號字符串的作用類似於雙引號字符串,並將反斜線解釋爲\ n等的轉義字符,要求實際反斜槓被轉義。 Coffeescript由於我不清楚的原因而使這種行爲延續下去。 –

+1

這應該是答案。 –

相關問題