一、字符串
字符串就是用單引號或者雙引號包裹起來的,零個或多個排列在一起的字符。
1.字符串的長度
計算字符串的長度使用字符串.length的方式。
例如:
var txt1 = "Hello World!";
document.write(txt1.length); // 12
2.字符索引
使用方法:在字符串后面接 [],中括號里面?zhèn)魅霐?shù)字,能夠訪問到字符串中的每個字符(索引從0開始)。
例如:
var str = "Hello World!";
console.log(str[1]); // e
3.charAt() 和 charCodeAt()
charAt() 和 charCodeAt() 均表示獲取指定位置的字符。不同的是
前者返回具體的字符,后者返回字符的 Unicode 碼。
例如:
var str = "Hello World!";
console.log(str.charAt(0)); // H
console.log(str.charCodeAt(0)); // 72
注意: 如果向 charCodeAt() 方法中傳入了負數(shù)或者大于等于字符串的長度,那么該方法會返回 NaN。
4.concat() 方法
concat() 方法能夠?qū)⒍鄠€字符串拼接起來,合成一個新的字符串。
例如:
var str1 = "He";
var str2 = "llo";
console.log(str1.concat(str2)); // Hello
注意:該方法可以傳入多個字符串參數(shù),實現(xiàn)多個字符串之間的拼接。
5.轉(zhuǎn)義字符
在 JavaScript 中,字符串可以寫在單引號或者雙引號中。正因為這樣,以下字符串無法解析:"My name is "swagger",This year 21 years old"。
該字符串會在My name is 被截斷。
解決字符串嵌套問題:
在字符串內(nèi)部的雙引號前面添加轉(zhuǎn)義字符(“\”)即可解決。
除此之外,轉(zhuǎn)義字符還可以將特殊字符轉(zhuǎn)換為字符串字符。轉(zhuǎn)義字符(\)可以用于轉(zhuǎn)義撇號、換行、引號等特殊字符。
alert("My name is \"swagger\",This year 21 years old");
如果在程序中需要設置磁盤路徑可能就包含 \ 字符,如果不加以處理就會出現(xiàn)找不到路徑的錯誤。
例如:
var path = "D:\resource";
console.log(path); // D:esource
這里面的 r 就被轉(zhuǎn)義了,所以需要在前面再添加一個 \。
var path = "D:\\resource";
console.log(path); // D:\resource
6.字符串對象
JavaScript 中有字符串類型,我們也知道這種類型的創(chuàng)建方式,但在 JavaScript 中還提供了另外一種方式,這種方式叫做字符串對象,使用 new 關鍵字將字符串定義成一個對象。
語法:
var newString = new String("Swagger");
注意:
- 不要創(chuàng)建
String對象,它會拖慢執(zhí)行速度,并可能產(chǎn)生其它副作用。 - 字符串和字符串對象是不同的,雖然效果相似,但是不能混為一談。
var str1 = "Swagger";
var str2 = new String("Swagger");
console.log(typeof str1); // string
console.log(typeof str2); // object
console.log(str1 == str2); // true
console.log(str1 === str2); // false
7.其它字符串常用方法
8. JavaScript 字符集
JavaScript 使用 Unicode 字符集,也就是說,在 JavaScript 引擎內(nèi)部,所有字符都用 Unicode 表示。
JavaScript 不僅以 Unicode 存儲字符,還允許直接在程序中使用 Unicode 編號表示字符,即將字符寫成 \uxxxx 的形式,其中 xxxx 代表該字符的 Unicode 編碼。
比如,\u00A9 代表版權號。解析代碼的時候,JavaScript 會自動識別一個字符是字面形式表示,還是 Unicode 形式表示。輸出給用戶的時候,所有字符都會轉(zhuǎn)成字面形式。
8.1 字符串 Base64 編碼
Base64 本身是一種加密方式,可以將任意字符轉(zhuǎn)成可打印字符。而我們使用這種編碼方法,主要不是為了加密,而是為了不出現(xiàn)特殊字符,簡化程序的處理。
JavaScript 中字符串提供了兩個有關 Base64 編碼的方法:
- btoa():字符串或二進制值轉(zhuǎn)成 Base64 編碼
- atob():Base64 編碼轉(zhuǎn)換成原來的編碼
var uname1 = "swagger";
console.log(btoa(uname1)); // c3dhZ2dlcg==
var uname2 = "c3dhZ2dlcg==";
console.log(atob(uname2)); // swagger
注意:這兩個方法不適合非 ASCII 碼的字符,會報錯。如果把非 ASCII 碼字符轉(zhuǎn)換成 Base64 編碼,必須中間插入一個轉(zhuǎn)碼環(huán)節(jié),再使用這兩個方法。
8.2 加解密中文文字
- encodeURIComponent():加密
- decodeURIComponent():解密
二、數(shù)組
數(shù)組(Array)是按照一定順序排列的一組值,每個值都擁有自己的編號,編號從 0 開始,整個數(shù)組用方括號來表示。
語法:
var arr = [item1, item2, item3];
上述代碼中 item1、item2、item3 元素就構成一個數(shù)組。兩端的方括號是數(shù)組的標志。因為數(shù)組元素編號從 0 開始,所以 item1 是數(shù)組的第 0 個元素。
注意: item1、item2 和 item3 是泛指,JavaScript 中的數(shù)組元素可以是任何類型的數(shù)據(jù)。
1.數(shù)組的特點
1.1 數(shù)組的本質(zhì)是對象
數(shù)組是對象的一種特殊的表現(xiàn)形式,因此創(chuàng)建的時候我們可以使用 new 方式來創(chuàng)建
var names = new Array("tom", "alice", "jack");
console.log(typeof names); // object
1.2 數(shù)組的長度
我們都知道,JavaScript 中的數(shù)組可以存放任意數(shù)據(jù)類型的數(shù)據(jù),而在計算機中不同的數(shù)據(jù)類型存儲的位置也是不同的,因此 JavaScript 中數(shù)組元素在內(nèi)存中的存儲位置是不連續(xù)的。
如果我們不能按照內(nèi)存地址來訪問數(shù)組元素,那樣在編程的時候會造成很大的不便,所以為了解決這個問題,我們按照下標的方式來對數(shù)組元素進行標記。,所以在計算數(shù)組長度的時候只需要計算數(shù)組元素的個數(shù)即可。

注意:數(shù)組的長度(length)是一個可寫屬性(可修改)。
- 如果
length長度小于數(shù)組本身,則舍棄多余的元素。 - 如果
length長度大于數(shù)組本身,則用空位補齊。 - 如果
length長度不是合法數(shù)值,則會報Invalid array length錯誤。
1.3 數(shù)組的遍歷
如果想要連續(xù)訪問數(shù)組中的每個元素,可以使用 for-in 快速遍歷。
var students = ["tom", "alice", "jack"];
for (var index in students) {
console.log(students[index]);
}
注意:for-in 循環(huán)遍歷數(shù)組的時候,for 循環(huán)中 index 表示數(shù)組的下標,并不是數(shù)組元素。
1.4 數(shù)組的空位
當數(shù)組的某個位置是空元素,即兩個逗號之間沒有任何值,我們稱該數(shù)組存在空位(hole)。
var countrys = ["china", "japan", "america"];
console.log(countrys.length); // 3
var countrys = ["china", "", "america"];
console.log(countrys.length); // 3
注意:如果最后一個元素后面有逗號,并不會產(chǎn)生空位,也就是說最后一個元素后面的逗號有和沒有是一樣的
1.5 數(shù)組的刪除
delelte 命令能刪除數(shù)組中的值,從而形成空位。但 delete 命令并不會影響 length 的屬性。
var countrys1 = ["china", "japan", "america"];
console.log(countrys1.length); // 3
delete countrys1[1];
console.log(countrys1.length); // 3
console.log(countrys1); // ["china", empty, "america"]
注意:delete 命令在使用的時候,是根據(jù)數(shù)組下標來對指定數(shù)組的值進行刪除的。
2.數(shù)組的調(diào)用
數(shù)組的調(diào)用是指數(shù)組元素的調(diào)用,數(shù)組元素通過 數(shù)組名[下標] 的方式來進行訪問。
var names = ["tom", "alice", "jack"];
console.log(names[1]); // alice
注意:數(shù)組元素一次只能訪問一個,不能一次連續(xù)訪問多個數(shù)組元素。
3.數(shù)組的常用方法
3.1 isArray
isArray 方法是 Array 提供的用來專門判斷當前對象是否為數(shù)組的方法,如果是數(shù)組返回 true,如果不是返回 false。
var arr = ["a", "b", "c"];
console.log(typeof arr); // object
console.log(Array.isArray(arr)); // true
var obj = {};
console.log(typeof obj); // object
console.log(Array.isArray(obj)); // false
3.2 valueOf
valueOf 方法屬于 Object 對象類型,作用是返回指定對象的原始值,在數(shù)組中使用是返回數(shù)組本身。
var arr = ["a", "b", "c"];
console.log(arr.valueOf() === arr); // true
注意:JavaScript 的許多內(nèi)置對象都重寫了該函數(shù),以實現(xiàn)更適合自身的功能需求。因此,不同類型對象的 valueOf() 方法的返回值和返回值類型均有可能不同。
3.3 toString
toString 方法能夠把數(shù)組轉(zhuǎn)換成字符串。
語法:
arr.toString();
var arr = ["a", "b", "c"];
console.log(arr.toString()); // a,b,c
3.4 push
push方法用于在數(shù)組的末端添加一個或多個元素,并返回添加后的數(shù)組長度。
語法:
arr.push(item);
var arr = ["a", "b", "c"];
console.log(arr.push("d")); // 4
3.5 pop
pop 方法用于刪除數(shù)組的最后一個元素,并返回刪除的這個元素。
語法:
arr.pop();
var arr = ["a", "b", "c"];
console.log(arr.pop()); // c
console.log(arr); // ["a", "b"]
3.6 join
join 方法能夠以給定的參數(shù)做分隔符,將所有的數(shù)組元素組成一個字符串。如果不提供參數(shù),默認使用逗號分隔。
語法:
arr.join(separator);
var arr = ["a", "b", "c"];
console.log(arr.join()); // a,b,c
console.log(arr.join("|")); // a|b|c
3.7 shift
shift 方法用于刪除數(shù)組中的第一個元素,并返回刪除的這個元素。
語法:
arr.shift();
var arr = ["a", "b", "c"];
console.log(arr.shift()); // a
3.8 unshift
unshift 方法用于在數(shù)組的第一個位置添加元素,并返回添加元素后的數(shù)組長度。
語法:
arr.unshift();
var arr = ["a", "b", "c"];
console.log(arr.unshift("100")); // 4
console.log(arr); // ["100", "a", "b", "c"]
3.9 reverse
reverse 方法能夠反序排列數(shù)組。
語法:
arr.reverse();
var arr = ["a", "b", "c"];
console.log(arr.reverse()); // ["c", "b", "a"]
3.10 slice
slice 方法可以根據(jù)指定的 起點和終點 來對數(shù)組進行截取,并生成一個新數(shù)組。新數(shù)組的內(nèi)容是從起點下標的元素到終點下標的元素,但不包含終點下標的元素本身。
語法:
arr.slice(index1, index2);
var arr = ["a", "b", "c"];
console.log(arr.slice(1, 2)); // b
上面的代碼從下標為 1 的元素開始截取,截取到下標為 2 處,但是不包括下標為 2 的元素。
注意:
-
slice方法的參數(shù)可以是負值,-1 代表最后一個元素,-2 代表倒數(shù)第二個元素。 - 如果只寫一個下標,則表示從該下標處截取到數(shù)組末尾。
3.11 splice
splice 方法和 slice 方法很相似,但是 splice 更強大,splice 方法的作用是在指定下標處截取一定長度的元素,再插入一些新元素,并將刪除的元素構成一個新數(shù)組返回,splice 方法會改變原數(shù)組。
語法:
arr.splice(index, removeCount, addItem1, addItem2...);
var nums = [1, 2, 3, 'a', 'b', 'c', 7, 8, 9];
// 從索引為 3 的位置刪除 3 個元素,再將 4, 5, 6 添加進去
var new1 = nums.splice(3, 3, 4, 5, 6);
console.log(new1); // ["a", "b", "c"]
console.log(nums); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
注意:前兩個參數(shù)是必要的,后面的可以自己選擇。
3.12 sort
sort 方法用于對數(shù)組元素進行排序,默認按照編碼方式進行排序(即不在括號里寫任何內(nèi)容),如果不希望按照默認方式排序,則需要自定義排序函數(shù)。
語法:
arr.sort(sortby);
var arr = [1, 100, 40, 25, 38];
console.log(arr.sort()); // [1, 100, 25, 38, 40]
注意:如果調(diào)用該方法時沒有使用參數(shù),則按照字符編碼的順序排序。
3.13 indexOf
indexOf 方法能夠從前到后檢索數(shù)組,并返回元素在數(shù)組中的第一次出現(xiàn)的下標,如果沒有找到則返回 -1,indexOf 第二個參數(shù)表示第幾個元素開始索引。
語法:
arr.indexOf(item, beginIndex);
var nums = [11, 13, 15, 17, 19, 11];
console.log(nums.indexOf(11)); // 0
console.log(nums.indexOf(11, 1)); // 5
console.log(nums.indexOf(100)); // -1
注意:第二個參數(shù)可以是負值,如果是 -1 則表示從最后一個元素開始向后查找(不推薦)。
3.14 lastIndexOf
lastIndexOf 方法能夠從后向前檢索數(shù)組,并返回元素在數(shù)組中的最后一次出現(xiàn)的下標,如果沒有找到則返回 -1,lastIndexOf 的第二個參數(shù)表示從第幾個元素開始索引,是可選參數(shù)。
語法:
arr.lastIndexOf(item, beginIndex);
var nums = [11, 13, 15, 17, 19, 11];
console.log(nums.lastIndexOf(11)); // 5
console.log(nums.lastIndexOf(11, -2)); // 0
console.log(nums.lastIndexOf(100)); // -1
4.二維數(shù)組
如果數(shù)組的元素還是數(shù)組,那么我們就稱外層數(shù)組是一個二維數(shù)組。
語法:
var arr = [[item1, item2], [item3, item4]];
var arr = [[1, 2], [3, 4]];
console.log(arr[0][1]); // 2
console.log(arr[1][0]); // 3
二維數(shù)組的調(diào)用很簡單,有兩個下標。第一個下標表示外層數(shù)組的下標,第二個下標表示內(nèi)層數(shù)組的下標。