Day2:字符串與數(shù)組

1.字面量

字面量是由語法表達式定義的常量,它是一個固定值,而不是一個變量,例如:'hello', 123, true,這些量都是字面量

2.字符串

表示方式

字符串有三種表示方式:

  1. 使用半角單引號'或雙引號"包含表示,例如:"string"'hello'
  2. 使用反引號包含表示,這個符號通常在鍵盤主鍵區(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:鞏固練習

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容