2014-10-09 12 views
1

我正在尋找一種方法來在javascript中執行多行字符串。我用過這樣的代碼:什麼是javascript反斜槓,它是如何處理多行字符串的?

var str = <><![CDATA[ 
This string spans multiple lines 
Doesn't need quoting of single quotes 
And the same goes for "double quotes". 
Because of the CDATA, I can also include some <b>html</b> 
Which can make use of <attributes with="double quotes"/> but at the same 
time, I can make use of the > and < signs without worrying about 
xml validity. 
]]></>; 

在Visual Studio 2012中使用這段代碼時,出現錯誤行。另外,我從來沒有在JavaScript或HTML中使用CDATA,所以我不確定這應該如何工作。

所以,1,這個代碼(有些調整)可以工作嗎? 2,什麼是防滑劑?

Source 1

Source 2

+3

JS不支持多行字符串(可能在ES6中?)。只需使用'+'連接。 – Alnitak 2014-10-09 13:38:07

+0

@Alnitak我不喜歡它,我不確定我會認爲它是多行字符串,但是不能在行尾使用反斜槓來繼續下一行?無論哪種方式,我同意在一些可用的瀏覽器中使用級聯 – Ian 2014-10-09 13:40:47

+0

@Ian,但這不是標準。 – Alnitak 2014-10-09 13:42:32

回答

2

你張貼的代碼是不是有效的JavaScript。如果您的腳本嵌入在X [HT] ML文檔中,CDATA技巧可能會有效,但我懷疑它仍然不會,因爲在Javascript解釋器看到它之前它會被轉換爲字面換行符。在任何情況下,包含非轉義換行符的字符串文字都是語法錯誤。

如果「antislash」你的意思是\字符(通常被稱爲「反斜線」),它可以用來(至少在符合第4或the ECMAScript specification後來版翻譯)繼續一個字符串到下一行。但是當你這樣做的時候,你並沒有真的創建一個「多行字符串」,因爲反斜槓和換行符都從字符串結果中省略。

var s = "abc \ 
     123" 
console.log(s) //= abc 123 

(我縮爲清楚起見以上,但如果你這樣做,其結果是實現相關的 - 一些JS解釋壁球額外的空格的LineContinuation後,而有的則沒有。)

通常在Javascript的解決方案是使用顯式換行符和串聯:

var z = "abc\n" + 
     "123" 
console.log(z) //= abc 
       // 123 

或者,也許這樣的事情(這是你的意思,@torazaburo?):

[ 
    "abc", 
    "123", 
    "third line", 
    "another line" 
].join("\n") 
+1

可能值得一提的是'[「..」,(newline)「..」]。join('')'hack。 – 2014-10-09 16:21:42

相關問題