1.字面量
字面量是由語法表達式定義的常量,它是一個固定值,而不是一個變量,例如:'hello', 123, true,這些量都是字面量
2.字符串
表示方式
字符串有三種表示方式:
- 使用半角單引號
'
或雙引號"
包含表示,例如:"string"
,'hello'
; - 使用反引號包含表示,這個符號通常在鍵盤主鍵區(qū)
1
鍵的左邊第一個,上面畫著一條波浪線,可以在英文輸入法狀態(tài)下直接按這個鍵打出反引號,它看起來是這樣的:
let string = `hello world!`; // 這種形式是es新增的多行字符串,它允許換行
let lines = `hello
world`; // 這是合法的寫法
??多行字符串是es6標準的新增方式,要使用這個特性,瀏覽器必須支持es6
模版字符串
es6中,可以使用es6新增的模版字符串:
let name = '小明';
let age = 16;
let str = `${name}今年${age}歲了`;
console.log(str); // '小明今年16歲了',不需要用加號連接
// 上面的表達式相當于
let str2 = name + '今年' + age + '歲了' // 字符串使用引號,變量不使用引號
這個特性可以用在一些es5中難以處理的地方:
let imgSrc = './images/logo.jpg'
let ele = `
<div class="head">
<img src="${imgSrc}">
</div>
`;
3. 字符串處理
判斷相等
使用==
或者===
來判斷字符串是否相等:
'hello' == 'hello' // true
'123' === 123 // false,左側(cè)是string類型,右側(cè)是number類型
字符串長度
用string.length
表示字符串長度:
let str = 'hello world';
console.log(str.length); // 11
轉(zhuǎn)義字符與特殊字符
js中的字符串用引號表示,如果引號本身就是字符串,那么寫法上有一些變化,我們需要用轉(zhuǎn)義字符來標記字符串中的特殊符號。
在原字符的前面加上反斜杠\
(這個按鍵一般在回車鍵上方,右方括號的右側(cè)),就能表示這個字符的轉(zhuǎn)義字符:
let str = '在引號中使用引號\'需要使用轉(zhuǎn)義字符';
let str2 = '一個反斜杠符號要用\\來表示';
js中還有一些特殊符號,也要用反斜杠的方式表示:
符號 | 說明 |
---|---|
\0 | Null字節(jié) |
\b | 退格符 |
\n | 換行符 |
\r | 回車符 |
\t | 制表符(Tab鍵可打出) |
\uXXXX | 四位十六進制數(shù)XXXX表示的Unicode字符,例如\u4f60\u597d 表示'你好' |
拓展:操作系統(tǒng)的換行符
- 在程序中,僅用
\n
表示換行- 在windows文件系統(tǒng)中,文件每行的結(jié)尾是
\r\n
(CRLF)- 在Unix(Linux、Mac)文件系統(tǒng)中,文件每行的結(jié)尾是
\n
(LF)因此假如在windows下打開Unix系統(tǒng)下的文件,所有的字符都會出現(xiàn)在同一行或者出現(xiàn)小黑點,在Unix系統(tǒng)下打開windows文件,每行結(jié)尾可能多出其他符號。
使用webstorm或vscode等編輯器時,注意留意軟件左下角或右下角的換行符(CRLF和LF)提示。
獲取指定位置的字符
let str = 'hello';
str.charAt(2); // 'l',取2號索引位置的字符(從0開始計數(shù))
str[1]; // 'e',
str.charCodeAt(0); // '104',取0號索引位置字符的ASCII碼
String.fromCharCode(104); // 'h',將ASCII碼轉(zhuǎn)換為對應(yīng)的字符
??fromCharCode()是一個類型方法,不能用字符串對象來調(diào)用,應(yīng)該使用String來調(diào)用。
ASCII碼
ASCII碼全稱是美國標準信息交換碼,是國際標準化組織(ISO)認定的國際標準,稱為ISO646標準,適用于全部拉丁文字符。
ASCII碼約定了常用字符使用什么樣的二進制編碼表示,將二進制轉(zhuǎn)換為十進制后:
- 48-57表示0-9十個阿拉伯數(shù)字
- 65-90表示從A-Z的26個大寫英文字母
- 97-122表示從a-z的26個小寫英文字母
ASCII碼和后續(xù)由ASCII碼表擴展的其他字符編碼是國際通用標準,可以將ASCII碼理解為計算機軟件與計算機硬件溝通的語言。
截取字符串
截取字符串中的指定字符有多種方法:
let str = 'hello.mp3';
// string.slice(start, end)
str.slice(0, 5); // 'hello',截取從start->end(不包含end)的字符
str.slice(-3); // 'mp3',從后向前截取字符
// string.substring(start, [stop]),方括號表示可選
str.substring(0, 5); // 'hello',截取從start->stop(不包含stop)的字符
str.substring(6); // 'mp3',截取從start到末尾的字符
// string.substr(start, [length])
str.substr(0, 5); // 'hello',從start開始,截取length個
str.substr(6); // 'mp3',從start開始截取到結(jié)尾
str.substr(-3); // 'mp3',從后向前截取字符
??在js中,字符串處理方法一般不會修改原字符串,而是返回一個新的字符串:
let str = 'hello'; console.log(str.slice(2)); // 'llo',返回新字符串 console.log(str); // 'hello',原字符串沒有被修改
查找字符串
使用indexOf()
和lastIndexOf()
方法可以查找一個字符串在另一個字符串中出現(xiàn)的位置:
let str = 'hello world';
str.indexOf('o'); // 4,返回字符串第一次出現(xiàn)的位置(索引號)
str.indexOf('a'); // -1,若沒有找到,則返回-1
str.lastIndexOf('o'); // 7,返回字符串最后一次出現(xiàn)的位置
str.indexOf('el'); // 1,也可以查詢多個字符,返回首字符所在的位置
拓展:正則表達式
除了js自帶的這些字符串處理函數(shù),還有一種叫做正則匹配的方法來處理字符串,目前暫不展開討論。
其他字符串處理函數(shù)
split
split()
函數(shù)可以按分隔符將字符串拆分為數(shù)組(在本節(jié)的后面會講到):
let str = '1991-10-11';
str.split('-'); // ['1991', '10', '11'],得到一個新數(shù)組,數(shù)組中保存的是按`-`符號拆分好的字符串
let str2 = 'hello';
str.split(''); // ['h', 'e', 'l', 'l', 'o'],若括號中寫空字符串`''`,則將字符串展開為數(shù)組
str.split(); // ['hello'],若括號中不寫內(nèi)容,則將字符串轉(zhuǎn)換為數(shù)組
trim
trim()
函數(shù)可以去掉字符串首尾的空白(空格符、換行符、制表符等):
let str = ' hello ';
str.trim(); // 'hello',去除字符串首尾兩端的空格
大小寫轉(zhuǎn)換
使用toUpperCase()
和toLowerCase()
來進行大小寫轉(zhuǎn)換:
let str = 'Hello Wolrd';
str.toUpperCase(); // 'HELLO WORLD',轉(zhuǎn)換為大寫
str.toLowerCase(); // 'hello world',轉(zhuǎn)換為小寫
4. 數(shù)組
基本概念
數(shù)組(Array)是有序排列的數(shù)據(jù)的集合。
有許多方式來創(chuàng)建數(shù)組:
let arr1 = [0, 2, 4, 6, 8]; // 直接賦值一個數(shù)組
let arr2 = new Array(); // 定義一個空數(shù)組
let arr3 = []; // 定義一個空數(shù)組
arr3.length = 5; // 定義一個長度為5的空數(shù)組(空的位置會自動用undefined填充)
let arr4 = new Array(8); // 定義一個長度為8的數(shù)組
let arr5 = new Array(0, 2, 4, 6, 8); // 定義數(shù)組并賦值
console.log(arr); // 在控制臺查看數(shù)組
數(shù)組就像更衣室里一個個有序排列的柜子,我們可以將不同類型的數(shù)據(jù)保存在數(shù)組的不同柜子中,數(shù)組中存放的數(shù)據(jù),稱為元素。
數(shù)組的長度,用arr.length
表示,就代表柜子的個數(shù):
let arr = ['a', 1, null]; // 定義一個存有字符串、數(shù)字和null的有3個元素的數(shù)組
console.log(arr.length); // 3,數(shù)組的長度為3,與元素個數(shù)相同
??為了方便閱讀,接下來的內(nèi)容中需要打印返回值的位置,不再書寫
console.log()
函數(shù),而是直接在注釋中給出返回值,例如:arr.length; // 3
使用數(shù)組名[索引號]
的方式來訪問(即查看、獲取)數(shù)組元素,索引號是元素在數(shù)組中的位序,從0開始計數(shù):
let arr = [2, 4, 6, 8, 10];
arr[0]; // 2,訪問0號索引位置的元素
arr[arr.length - 1]; // 10,訪問數(shù)組中的最后一個元素
數(shù)組中也可以保存另一個數(shù)組:
let arr = [
[1, 2, 3],
['a', 'b', 'c']
];
arr[1]; // ['a', 'b', 'c']
arr[1][2]; // 'c'
??沒有特殊情況,不要直接對
arr.length
賦值,因為這樣會改變數(shù)組的長度,長度縮短會導(dǎo)致數(shù)組中的數(shù)據(jù)丟失,
數(shù)組處理
賦值
通過直接對數(shù)組的某個索引位置賦值,可以修改數(shù)組:
let arr = [2, 4, 6, 8, 10];
arr[0] = 5
添加元素
直接賦值
直接對索引位置賦值來向添加元素:
let arr = [2, 4, 6];
arr[3] = 8;
arr; // [2, 4, 6, 8]
arr[5] = 10;
arr; // [2, 4, 6, undefined, 10],空位會自動用undefined補全
push在末尾添加
push()
方法能夠向數(shù)組末尾添加一個或多個元素,返回新數(shù)組的長度,這個方法會修改原數(shù)組:
let arr = [1, 2, 3];
arr.push(4); // 4
arr.push('a', 5); // 6
arr; // [1, 2, 3, 4, 'a', 5],原數(shù)組被改變了
unshift在開頭添加
unshift()
方法能夠向數(shù)組的開頭添加一個或多個元素,返回新數(shù)組的長度:
let arr = [1, 2, 3];
arr.unshift('a'); // 4
arr; // ['a', 1, 2, 3]
刪除元素
pop刪除最后一個元素
使用pop()
方法來刪除數(shù)組的最后一個元素,返回被刪除的這個元素:
let arr = ['a', 'b'];
arr.pop(); // 'b'
arr; // ['a']
shift刪除第一個元素
使用shift()
方法來刪除數(shù)組的第一個元素,返回被刪除的這個元素:
let arr = ['a', 'b'];
arr.shift(); // 'a'
arr; // ['b']
splice刪除指定元素
splice()
方法可以刪除指定的一個或者連續(xù)的多個元素,返回被刪除元素的集合(即以數(shù)組形式返回被刪除的元素),這個方法也可以替換指定的元素:
語法:
string.splice(index, [length], [item1, item2, ..., itemX])
index:表示從第幾個索引號開始刪除
length(可選):表示刪除幾個元素,默認為1個
item(可選):表示向刪除元素的位置添加新元素
例如:string.splice(1, 3)
表示從1號索引位置開始,刪除3個元素
let arr = ['a', 'b', 'c', 'd', 'e'];
arr.splice(0); // ['a']
arr; // ['b', 'c', 'd', 'e']
arr.splice(1, 2); // ['c', 'd']
arr; // ['b', 'e']
arr.splice(0, 1, 'hello', 'world'); // ['b']
arr; // ['hello', 'world', 'e']
數(shù)組的連接與分割
數(shù)組的連接與分割都不會破壞原數(shù)組,這些方法都會返回一個新數(shù)組作為結(jié)果。
連接數(shù)組
concat()
方法可以連接兩個數(shù)組,返回連接后的新數(shù)組:
let a = [1, 2, 3];
let b = [4, 5, 6];
a.concat(b); // [1, 2, 3, 4, 5, 6]
join()
方法將數(shù)組內(nèi)的元素連接為一個新字符串:
let arr = ['a', 'b', 'c'];
arr.join(); // 'a,b,c'
arr.join(''); // 'abc'
arr.join('-'); // 'a-b-c'
分割數(shù)組
使用slice()
方法來提取數(shù)組中的一段元素,返回一個新數(shù)組:
let arr = [1, 2, 3, 4];
arr.slice(1, 2); // [2, 3],注意,slice(n, m)函數(shù)的表示從n號索引位置開始,到m號索引位置結(jié)束,與splice()函數(shù)的參數(shù)不同,這里表示的是從1號索引取到2號索引
arr.slice(1); // [2, 3, 4],不寫第二個參數(shù),表示截取到結(jié)尾
查找元素
與字符串類似,在數(shù)組中,可以查找元素是否在數(shù)組中,也可以查找元素在數(shù)組中的哪個索引位置,使用indexOf()
和lastIndexOf()
方法來進行查找:
let arr = ['a', 'b', 'c', 'a'];
arr.indexOf('a'); // 0
arr.indexOf('a', 1); // 3,第二個參數(shù)1表示從1號索引位置后開始查找,因此找到的是第二個'a'
arr.indexOf('d'); // -1,沒有找到時,返回-1
本系列教程作品采用 [知識共享署名-非商業(yè)性使用-禁止演繹 4.0 國際許可協(xié)議] 進行許可。 轉(zhuǎn)載請發(fā)郵件到我的郵箱340349237@qq.com,并注明作者Tianzhen。
練習:Day2.5:鞏固練習