## 一、概述
### 1.1 定義
字符串就是零個或多個排在一起的字符,放在單引號或雙引號之中。
~~~
'abc'
"abc"
~~~
單引號字符串的內部,可以使用雙引號。雙引號字符串的內部,可以使用單引號。
~~~
'key = "value"'
"It's a long journey"
~~~
如果要在單引號字符串的內部,使用單引號,就必須在內部的單引號前面加上反斜杠,用來轉義。雙引號字符串內部使用雙引號,也是如此。
~~~
'Did she say \'Hello\'?'
// "Did she say 'Hello'?"
"Did she say \"Hello\"?"
// "Did she say "Hello"?"
~~~
由于 HTML 語言的屬性值使用雙引號,所以很多項目約定 JavaScript 語言的字符串只使用單引號。當然,只使用雙引號也完全可以。重要的是堅持使用一種風格,不要一會使用單引號表示字符串,一會又使用雙引號表示。
* 如果長字符串必須分成多行,可以在每一行的尾部使用反斜杠。
~~~
var longString = 'Long \
long \
long \
string';
longString // "Long long long string"
~~~
* 連接運算符(`+`)可以連接多個單行字符串,將長字符串拆成多行書寫,輸出的時候也是單行。
~~~
var longString = 'Long '
+ 'long '
+ 'long '
+ 'string';
~~~
### 1.2 轉義
反斜杠(\\)在字符串內有特殊含義,用來表示一些特殊字符,所以又稱為轉義符。
需要用反斜杠轉義的特殊字符,主要有下面這些。
* `\0`:null(`\u0000`)
* `\b`:后退鍵(`\u0008`)
* `\f`:換頁符(`\u000C`)
* `\n`:換行符(`\u000A`)
* `\r`:回車鍵(`\u000D`)
* `\t`:制表符(`\u0009`)
* `\v`:垂直制表符(`\u000B`)
* `\'`:單引號(`\u0027`)
* `\"`:雙引號(`\u0022`)
* `\\`:反斜杠(`\u005C`)
上面這些字符前面加上反斜杠,都表示特殊含義。
~~~
console.log('1\n2')
// 1
// 2
~~~
上面代碼中,`\n`表示換行,輸出的時候就分成了兩行。
### 1.3 字符串與數組
字符串可以被視為字符數組,因此可以使用數組的方括號運算符,用來返回某個位置的字符(位置編號從0開始)。
~~~
var s = 'hello';
s[0] // "h"
s[1] // "e"
s[4] // "o"
// 直接對字符串使用方括號運算符
'hello'[1] // "e"
~~~
如果方括號中的數字超過字符串的長度,或者方括號中根本不是數字,則返回`undefined`。
~~~
'abc'[3] // undefined
'abc'[-1] // undefined
'abc'['x'] // undefined
~~~
字符串內部的單個字符無法改變和增刪。
~~~
var s = 'hello';
delete s[0];
s // "hello"
s[1] = 'a';
s // "hello"
s[5] = '!';
s // "hello"
~~~
### 1.4 length 屬性
`length`屬性返回字符串的長度,該屬性也是無法改變的。
~~~
var s = 'hello';
s.length // 5
s.length = 3;
s.length // 5
s.length = 7;
s.length // 5
~~~
上面代碼表示字符串的`length`屬性無法改變,但是不會報錯。
## 二、字符集
JavaScript 使用 Unicode 字符集。JavaScript 引擎內部,所有字符都用 Unicode 表示。
JavaScript 不僅以 Unicode 儲存字符,還允許直接在程序中使用 Unicode 碼點表示字符,即將字符寫成`\uxxxx`的形式,其中`xxxx`代表該字符的 Unicode 碼點。比如,`\u00A9`代表版權符號。
~~~
var s = '\u00A9';
s // "?"
~~~
解析代碼的時候,JavaScript 會自動識別一個字符是字面形式表示,還是 Unicode 形式表示。輸出給用戶的時候,所有字符都會轉成字面形式。
~~~
var f\u006F\u006F = 'abc';
foo // "abc"
~~~
上面代碼中,第一行的變量名`foo`是 Unicode 形式表示,第二行是字面形式表示。JavaScript 會自動識別。
我們還需要知道,每個字符在 JavaScript 內部都是以16位(即2個字節)的 UTF-16 格式儲存。也就是說,JavaScript 的單位字符長度固定為16位長度,即2個字節。
JavaScript 對 UTF-16 的支持是不完整的,由于歷史原因,只支持兩字節的字符,不支持四字節的字符。這是因為 JavaScript 第一版發布的時候,Unicode 的碼點只編到`U+FFFF`,因此兩字節足夠表示了。后來,Unicode 納入的字符越來越多,出現了四字節的編碼。但是,JavaScript 的標準此時已經定型了,統一將字符長度限制在兩字節,導致無法識別四字節的字符。
- 階段一 Java 零基礎入門
- 步驟1:基礎語法
- 第01課 初識
- 第02課 常量與變量
- 第03課 運算符
- 第04課 選擇結構
- 第05課 循環結構
- 第06課 一維數組
- 第08課 方法
- 第09課 數組移位與統計
- 第10課 基礎語法測試
- 第09課 基礎語法測試(含答案)
- 步驟2:面向對象
- 第01課 類和對象
- 第02課 封裝
- 第03課 學生信息管理
- 第04課 繼承
- 第05課 單例模式
- 第06課 多態
- 第07課 抽象類
- 第08課 接口
- 第09課 內部類
- 第10課 面向對象測試
- 第10課 面向對象測試(含答案)
- 步驟3:常用工具類
- 第01課 異常
- 第02課 包裝類
- 第03課 字符串
- 第04課 集合
- 第05課 集合排序
- 第06課 泛型
- 第07課 多線程
- 第08課 輸入輸出流
- 第09課 案例:播放器
- 第10課 常用工具測試(一)
- 第10課 常用工具測試(一)(答案)
- 第10課 常用工具測試(二)
- 第10課 常用工具測試(二)(答案)
- 階段二 從網頁搭建入門 JavaWeb
- 步驟1:HTML 與 CSS
- 第01課 HTML 入門
- 第01課 HTML 入門(作業)
- 第02課 CSS 入門
- 第02課 CSS 入門(作業)
- 第03課 CSS 布局
- 第03課 CSS 布局(作業)
- 步驟2:JavaScript 與前端案例
- 第01課 JavaScript 入門
- 第01課 JavaScript 入門(作業)
- 第02課 仿計算器
- 第03課 前端油畫商城案例
- 第04課 輪播圖
- 第05課 網頁搭建測試
- 第05課 網頁搭建測試(含答案)
- 步驟3:JavaScript 教程
- 入門
- 概述
- 基本語法
- 數據類型
- 概述
- 數值
- 字符串
- undefined, null 和布爾值
- 對象
- 函數
- 數組
- 運算符
- 算術運算符
- 比較運算符
- 布爾運算符
- 位運算符
- 運算順序
- 語法專題
- 數據類型的轉換
- 錯誤處理機制
- 標準庫
- String
- Date
- Math
- DOM
- 概述
- Document 節點
- 事件
- EventTarget 接口
- 事件模型
- 常見事件
- 階段三 數據庫開發與實戰
- 步驟1:初始數據庫操作
- 第01課 數據類型
- 第02課 表的管理
- 第03課 數據管理
- 第04課 常用函數
- 第05課 JDBC 入門
- 第06課 Java 反射
- 第07課 油畫商城
- 第08課 數據庫基礎測試
- 步驟2:MyBatis 從入門到進階
- 第01課 IntelliJ IDEA 開發工具入門
- 第02課 Maven 入門
- 第03課 工廠模式
- 第04課 MyBatis 入門
- 第05課 MyBatis 進階
- 第06課 商品信息管理
- 第07課 MyBatis 基礎測試
- 步驟3:Redis 數據庫與 Linux 下項目部署
- 第01課 Linux 基礎
- 第02課 Linux 下 JDK 環境搭建及項目部署
- 第03課 Redis 入門
- 階段四 SSM 到 Spring Boot 入門與綜合實戰
- 步驟1:Spring 從入門到進階
- 第01課 Spring 入門
- 第02課 Spring Bean 管理
- 第03課 Spring AOP
- 第04課 基于 AspectJ 的 AOP 開發
- 第05課 JDBC Template
- 第06課 Spring 事務管理
- 第07課 人員管理系統開發
- 第08課 Spring 從入門到進階測試
- 步驟2:Spring MVC 入門與 SSM 整合開發
- 第01課 Spring MVC 入門與數據綁定
- 第02課 Restful 風格的應用
- 第03課 SpringMVC 攔截器
- 第04課 辦公系統核心模塊
- 步驟3:Spring Boot 實戰
- 第01課 Spring Boot 入門
- 第02課 校園商鋪項目準備
- 第03課 校園商鋪店鋪管理
- 第04課 校園商鋪商品管理及前臺展示
- 第05課 校園商鋪框架大換血
- 步驟4:Java 面試
- 第01課 面試準備
- 第02課 基礎面試技巧
- 第03課 Web基礎與數據處理
- 第04課 主流框架