JavaScript:多行字串

來源:互聯網
上載者:User

標籤:ati   blog   斷行符號符   har   動手   cte   作者   分隔字元   enc   

原文:http://www.cnblogs.com/ziyunfei/archive/2012/10/04/2711551.html

多行字串的作用是用來提高原始碼的可讀性.尤其是當你處理預定義好的較長字串時,把這種字串分成多行書寫更有助於提高代碼的可讀性和可維護性.在一些語言中,多行字串還可以用來做代碼注釋.
大部分動態指令碼語言都支援多行字串,比如Python, Ruby, PHP. 但Javascript呢?

譯者注:python中可以使用兩種多行字串的寫法,一種是使用三引號,也是python中多行注釋的方法,這種方法產生的多行字串是真正的多行.也就是說,解譯器會認為每行的結尾處的確有一個"\n":

>>>print("""我你他""")我你他

另一種寫法是

>>>print("我你他")我你他

這種寫法也是下面要講的JavaScript目前實現的寫法,它產生的實際上只有一行字串.但稱它為多行指的是在原始碼中這個字串佔用了多個物理行(對應的概念是邏輯行).

Ruby, PHP中是通過Here document實現多行字串.

你在網上見過下面這種結論嗎?

"Javascript不支援多行字串."

"多行字串不是合法的JavaScript文法."

"這種特性是沒有被標準化的私人實現."

如果是的話,忘掉它們吧,這樣的說法是不對的.Javascript其實支援多行字串.

關於JavaScript最奇怪的一件事是,儘管這門語言有著非常好的規範文檔ECMA-262.但卻有很多關於該語言的誤解.網上有太多描述不恰當的或者完全錯誤的文章.

當然,每個人都有權選擇自己去讀什麼文章,有權選擇是否相信文章中給出的結論.但當我在部落格上,郵件清單上,twitter上,或者其他任何地方閱讀關於JavaScript的東西時,我總是會動手進行測試,最主要的是我會開啟ECMA-262,把文中給出的資訊和文檔做對比,看看是不是像他說的那樣.也許你會問我:"那你為什麼還要讀別人的文章啊?".是啊,既然有了ECMA-262文檔,我們為何還要去讀別人寫的文章呢?首先,規範文檔是比較難閱讀和難理解的.你必須很熟悉文檔中提到的那些抽象的東西才能真正的弄懂它.而且你必須閱讀完整的相關內容.如果你跳過一些單詞或句子,你就可能理解錯誤.

寫在部落格中的文章可以看作是更高層次的文檔.通常意味著作者是在讀過文檔之後,用更容易理解的話語和程式碼片段解釋了文檔中的內容.這樣的文章才算是好文章.

多行字串就是我上面所說的一個例子.它確實是正式規範(ECMA 265 5th edition)的一部分,ES5擴充了字串字面量的文法.在(7.8.4 String Literals)中添加了DoubleStringCharacterSingleStringCharacter: LineContinuation.

LineContinuation 的文法是:

\ LineTerminatorSequence

LineTerminatorSequence 指的是下面這些字元中的一個:

分行符號 <LF>
斷行符號符 <CR>
行分割符 <LS>
段分隔字元 <PS>

 

 

 

 

 

換句話說,你可以通過轉義行終止符來實現多行字串.你必須這麼做,否則會得到一個語法錯誤.

var htmlStr = ‘\
<div>\
content\
</div>\
‘;

當他,這種寫法只支援ECMA-262-5的環境.(譯者注:實際上,ES3的環境也全都支援)
但是需要注意的是,當輸出字串時,分行符號是不會顯示出來的.如果你需要真實的換行,必須在反斜線前面加上一個\n.

如果你需要相容舊的引擎環境,你應該使用多個字串相串連的辦法,或者把多個字串分別放在一個數組的元素中,最後join它們

var htmlStr = ‘<div>‘ +
‘content‘ +
‘</div>‘;
 var htmlStr = [
‘<div>‘,
‘content‘,
‘</div>‘
].join(‘‘);

JavaScript風格的多行字串是有點小丑,而且很容易出錯.不過有個好訊息是,在未來版本的規範中,將會有一個 Template Strings: http://wiki.ecmascript.org/doku.php?id=harmony:quasis.

JavaScript:多行字串

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.