Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

JavaScript 字串(String)是什麼?引號、跳脫字元與模板字串

最後更新:2026年2月12日JavaScript

前幾篇我們認識了數字型態,知道 JavaScript 怎麼儲存和計算數字。

但程式不可能只處理數字——你一定也需要處理文字,像是使用者的名字、一段訊息、或是一個網址。

在 JavaScript 裡,文字是用另一種資料型態來表示的,叫做字串(String)。

這篇文章會帶你了解:字串怎麼寫、JavaScript 怎麼儲存文字、特殊字元怎麼處理、以及字串可以做什麼運算。

JavaScript 中的字串怎麼寫?

字串就是一段用引號包起來的文字。

在 JavaScript 裡,你可以用三種引號來包住字串:

"Lie on the ocean"     // 雙引號
'Float on the ocean'   // 單引號
`Down on the sea`      // 反引號

三種都可以,只有一個規則:開頭和結尾的引號必須是同一種。

用雙引號開頭就要用雙引號結尾,用單引號開頭就要用單引號結尾,不能混用。

"這樣是對的"
'這樣也是對的'
"這樣就會出錯'    // 開頭雙引號,結尾單引號,不行!

不管你用哪一種引號,放在引號之間的文字,JavaScript 都會把它當成一個字串值——也就是資料型態為「字串」的資料值。

JavaScript 的字串為什麼叫 String?

你可能會好奇:文字為什麼叫「字串(String)」,而不是「字詞(Word)」?

因為 String 這個詞的重點不是「文字的意義」,而是「把字元串在一起」。

想像每一個字母、數字、空格、標點符號都是一顆珠子。

程式用一條線把這些珠子一顆一顆「串」起來——String 的本意就是「細繩」或「線」,完整的說法是 String of Characters(一串字元)。

這就是為什麼 "Hello World" 是一個 String——空格也是一顆珠子,被串在 o 和 W 之間。

甚至 "ajskdlf" 這種完全沒有意義的亂碼,也是一個有效的 String。

因為 String 在意的是「資料的排列」,不在意「這段文字有沒有意義」。

如果叫 Word(字詞),那就暗示它必須是一個有意義的單字,像 "hello" 或 "cat"。

但實際上,字串可以包含空白、數字、標點符號,甚至是一整篇文章——這些都不是一個「Word」能涵蓋的範圍。

所以下次看到 String,就想像一條線串起一堆珠子,這就對了。

JavaScript 字串可以用 + 連接嗎?

既然字串是「一串珠子」,那能不能把兩串珠子接在一起?

可以。字串可以用 + 運算子來連接——把兩個字串頭尾接在一起,變成一串更長的珠子。

"con" + "cat" + "e" + "nate"    // 得到 "concatenate"

JavaScript 會把這四段字串依序黏起來,變成一個新的字串 "concatenate"。

不過要注意,字串的 + 做的不是加法,而是連接。

數字可以用 +、-、*、/ 來計算,但字串只有 + 可以用,而且意義完全不同。

至於 -、*、/ 這些運算子,對字串是沒有用的。

字串還有很多其他操作方式,像是取出其中一部分、轉換大小寫等等,這些會在後面的文章介紹。

JavaScript 怎麼儲存字串?用 Unicode 把文字變成數字

前面幾篇提到,電腦的記憶體裡只有位元(0 和 1),而數字可以直接轉換成位元來儲存。

但文字不是數字,那 JavaScript 要怎麼把文字存進記憶體?

做法是:先把每個字元轉換成一個數字,然後再儲存這些數字。

那問題來了——哪個字元對應哪個數字?誰來決定?

答案是一套叫做 Unicode(萬國碼) 的國際標準。

Unicode 幫世界上幾乎每一個字元都分配了一個獨一無二的數字編號,不只是英文字母,包括中文、日文、阿拉伯文、希臘文,甚至是表情符號 😀,都有自己的編號。

有了 Unicode,JavaScript 就能把一段字串變成一串數字,然後用位元儲存在記憶體裡。

16 位元與字元的限制

前面介紹數字型態時提到,JavaScript 用 64 個位元來儲存一整個數字值,不管是 1 還是 9999,都是 64 個位元。

但字串的儲存方式不一樣。

字串不是一個值佔固定的位元數,而是每一個字元各佔 16 個位元。

用圖來看比較清楚:

數字不管多大多小,永遠佔固定的 64 個位元。

而字串是每個字元各佔 16 個位元,字越多,佔的空間就越多。

從上面的圖可以看到,字串裡的每個字元各佔一個格子,每個格子是 16 個位元。

那一個格子能裝多少種不同的字元?

16 個位元能排出 2¹⁶ = 65,536 種不同的組合,也就是說,每個格子最多能區分 65,536 種不同的字元。

這個數量看起來很多。

但 Unicode 目前定義的字元已經超過 13 萬個,大約是 65,536 的兩倍。

所以有些字元(像是許多表情符號 😀)在 JavaScript 裡會佔掉兩個字元的位置,而不是一個。

這是一個比較進階的細節,目前只要知道有這回事就好。

JavaScript 字串裡怎麼放引號和特殊字元?

問題:引號裡面要放引號怎麼辦?

假設你想要表示這段文字:他說 "你好"。

如果你用雙引號來包字串,裡面又出現雙引號,JavaScript 就會搞混——它會以為中間的雙引號是字串的結尾:

"他說 "你好""    // JavaScript 會在第二個 " 就認為字串結束了,然後報錯

解法:跳脫字元(Escape Character)

為了解決這個問題,JavaScript 提供了一個特殊符號:反斜線 \。

在字串裡,只要在一個字元前面加上 \,就是告訴 JavaScript:「後面這個字元有特殊意義,不要用一般的方式處理它。」

這個做法叫做跳脫(Escaping)。

為什麼叫「跳脫」?因為它真的在描述一種「逃離原本規則」的行為。

在程式碼中,引號就像是邊界圍牆——JavaScript 看到第一個引號時會進入「字串模式」,看到下一個引號就會「結束字串」。

如果你在字串裡直接寫引號,JavaScript 會誤以為字串在那裡就結束了,後面的文字就會變成錯誤語法。

但是當你寫成 \" 時,反斜線就是在告訴 JavaScript:「後面這個引號不是結束標記,讓它逃離語法規則,當成普通文字就好。」

所以上面的問題可以這樣解決:

"他說 \"你好\""    // \" 代表「這是字串裡面的引號,不是字串的結尾」

\" 裡的反斜線告訴 JavaScript:「後面這個 " 只是一般文字,不要把它當成字串結尾。」

反斜線的兩種作用

有趣的是,反斜線 \ 對不同的字元會產生相反的效果:

讓有功能的符號變普通

引號 " 原本的功能是標記字串的開頭和結尾,但加上 \ 之後,\" 就逃離了這個職責,變成一個普通的引號字元。

讓沒功能的字母變特殊

字母 n 原本只是一個普通的字母,但加上 \ 之後,\n 就逃離了字母的身分,獲得了「換行」的特殊功能。

同樣地,字母 t 加上 \ 變成 \t,就從普通字母變成了「Tab 縮排」。

這種「脫離常規」的行為,在程式裡統一稱為跳脫字元(Escape Character)。

常用的跳脫字元

除了跳脫引號,反斜線還能搭配其他字元來表示一些無法直接顯示的字元,像是「換行」或「Tab 縮排」:

寫法代表的意思說明
\"雙引號在雙引號字串裡放入雙引號
\'單引號在單引號字串裡放入單引號
\n換行相當於按下 Enter 鍵
\tTab相當於按下 Tab 鍵
\\反斜線本身當你真的想顯示一個 \ 時
代表的意思雙引號
說明在雙引號字串裡放入雙引號
代表的意思單引號
說明在單引號字串裡放入單引號
代表的意思換行
說明相當於按下 Enter 鍵
代表的意思Tab
說明相當於按下 Tab 鍵
代表的意思反斜線本身
說明當你真的想顯示一個 \ 時

舉個例子,\n 代表換行:

"第一行\n第二行"

這段字串實際顯示出來會是:

第一行
第二行

如果我想顯示反斜線本身呢?

既然 \ 在字串裡有特殊意義,那如果你真的想讓字串裡出現一個 \ 符號,就需要用兩個反斜線 \\:

"換行字元的寫法是 \"\\n\""

這段字串實際顯示出來會是:

換行字元的寫法是 "\n"

這裡的 \"\\n\" 很容易讓人誤以為中間是換行字元 \n,但其實不是。

讓我們一個一個拆開來看:

程式碼中的寫法實際顯示原因
\""反斜線讓引號逃離結束標記的職責,變成普通文字
\\\兩個反斜線代表「顯示一個反斜線」
nn前面的 \\ 已經自成一組,這裡的 n 只是一個普通字母
\""同第一組,跳脫的引號
實際顯示"
原因反斜線讓引號逃離結束標記的職責,變成普通文字
實際顯示\
原因兩個反斜線代表「顯示一個反斜線」
實際顯示n
原因前面的 \\ 已經自成一組,這裡的 n 只是一個普通字母
實際顯示"
原因同第一組,跳脫的引號

所以 \\n 其實是 \\ + n(反斜線加上字母 n),跟 \n(換行)是完全不同的東西。

JavaScript 模板字串(Template Literal)是什麼?

前面提到,字串可以用雙引號、單引號或反引號來寫。

雙引號和單引號的功能幾乎一樣,唯一的差別是:字串裡出現跟外面同一種引號時,才需要跳脫。

"他說 \"你好\""    // 外面是雙引號,裡面的雙引號要跳脫
'他說 \'你好\''    // 外面是單引號,裡面的單引號要跳脫

"他說 '你好'"      // 外面是雙引號,裡面放單引號就不用跳脫
'他說 "你好"'      // 外面是單引號,裡面放雙引號就不用跳脫

但反引號就不一樣了。

用反引號包起來的字串,也叫做模板字串(Template Literal)。

你可能會覺得奇怪:「模板」不是像 Canva 或 PPT 那種設計好的模板嗎,跟字串有什麼關係?

其實概念是一樣的。

PPT 模板是一個設計好的框架,裡面留了幾個空位讓你填入標題和內容。

模板字串也是一樣——它是一段設計好的文字框架,裡面可以用 ${} 挖幾個空位,讓 JavaScript 自動把計算結果填進去。

另外,Literal 在程式裡的意思是「你寫什麼,它就是什麼」。

合在一起,Template Literal 就是:一個你在程式碼裡怎麼寫,最終就長什麼樣子的模板。

它有兩個雙引號和單引號做不到的特殊功能。

特殊功能一:保留原始排版,可以直接換行

就像 PPT 模板會幫你保留格式一樣,模板字串也會保留你寫的排版。

一般的雙引號或單引號字串,如果你想換行,必須用 \n:

"第一行\n第二行\n第三行"

這段字串實際顯示出來會是:

第一行
第二行
第三行

寫起來不太直覺,因為你沒辦法從程式碼裡一眼看出最終的排版。

但反引號的字串可以直接在程式碼裡按 Enter 換行:

`第一行
第二行
第三行`

兩種寫法產生的結果一模一樣,但模板字串的寫法你一看就知道最終會長什麼樣子,不需要在腦中把 \n 轉換成換行。

特殊功能二:用 ${} 挖空填入計算結果

這是模板字串最強大的功能,也是它之所以叫「模板」的核心原因。

傳統的雙引號字串就像一塊已經燒好的磚頭,想加東西只能用 + 一段一段接:

"100 的一半是 " + (100 / 2)    // 用 + 拼接,讀起來很碎

模板字串則像一個填色本——你先把整段文字的結構寫好,中間用 ${} 留空位,JavaScript 會自動把計算結果填進去:

`100 的一半是 ${100 / 2}`

JavaScript 會先計算 100 / 2 得到 50,然後把 50 放進字串中,最後得到:

100 的一半是 50

${} 裡面可以放任何會產生值的 JavaScript 程式碼,JavaScript 都會先算完,再轉成字串塞進去。

小結

讓我們整理一下這篇文章的重點:

  1. 字串是用來表示文字的資料型態,用引號(雙引號 "、單引號 '、反引號 `)包起來。
  2. String 的意思是「一串字元」,就像用線串起一堆珠子。
  3. 字串可以用 + 運算子來連接,就是把兩串珠子接在一起。
  4. JavaScript 用 Unicode 標準把每個字元對應到一個數字,再用 16 個位元儲存每個字元。
  5. 字串裡要放引號或特殊字元時,用反斜線 \ 來跳脫,像是 \"、\n、\\。
  6. 反引號字串叫做模板字串(Template Literal),可以直接換行,還能用 ${} 嵌入計算結果。
目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

JavaScript

目錄

  • JavaScript 中的字串怎麼寫?
  • JavaScript 的字串為什麼叫 String?
  • JavaScript 字串可以用 + 連接嗎?
  • JavaScript 怎麼儲存字串?用 Unicode 把文字變成數字
  • 16 位元與字元的限制
  • JavaScript 字串裡怎麼放引號和特殊字元?
  • 問題:引號裡面要放引號怎麼辦?
  • 解法:跳脫字元(Escape Character)
  • 反斜線的兩種作用
  • 常用的跳脫字元
  • 如果我想顯示反斜線本身呢?
  • JavaScript 模板字串(Template Literal)是什麼?
  • 特殊功能一:保留原始排版,可以直接換行
  • 特殊功能二:用 ${} 挖空填入計算結果
  • 小結