Javascript二:數(shù)組和字符串

數(shù)組

判斷一個(gè)變量是不是數(shù)組

1.使用 Array.isArray 判斷,如果返回 true, 說(shuō)明是數(shù)組

if (Array.isArray(value)){ 
 //對(duì)數(shù)組執(zhí)行某些操作
} 

2.使用 instanceof Array 判斷,如果返回true, 說(shuō)明是數(shù)組

if (value instanceof Array){ 
 //對(duì)數(shù)組執(zhí)行某些操作
} 
//但如果網(wǎng)頁(yè)中包含多個(gè)框架,那實(shí)際上就存在兩個(gè)以上不同的全局執(zhí)行環(huán)境,從而存在兩個(gè)以上不同版本的 Array 構(gòu)造函數(shù)。如果你從一個(gè)框架向另一個(gè)框架傳入一個(gè)數(shù)組,那么傳入的數(shù)組與在第二個(gè)框架中原生創(chuàng)建的數(shù)組分別具有各自不同的構(gòu)造函數(shù)。

3.使用 Object.prototype.toString.call 判斷,如果值是 [object Array], 說(shuō)明是數(shù)組
4.通過(guò) constructor 來(lái)判斷,如果是數(shù)組,那么 arr.constructor === Array. (不準(zhǔn)確,因?yàn)槲覀兛梢灾付?obj.constructor = Array)

偽數(shù)組

擁有l(wèi)ength屬性,索引但不具有數(shù)組所具有的方法;
常見(jiàn)的偽數(shù)組有: 函數(shù)的參數(shù) arguments, 獲取DOM元素列表。

//偽數(shù)組可以轉(zhuǎn)換為數(shù)組:
//第一種方法
Array.prototype.slice.call(arrayLike, start);
//第二種方法
[...arrayLike];
//第三種方法:
Array.from(arrayLike)

改變?cè)瓟?shù)組的方法

push();向數(shù)組末尾添加一個(gè)或多個(gè)元素,返回新數(shù)組的長(zhǎng)度

pop();刪除數(shù)組最后一個(gè)元素,返回被刪除的元素

unshift();向數(shù)組開(kāi)頭添加一個(gè)或多個(gè)元素,返回新數(shù)組的長(zhǎng)度

shift();刪除數(shù)組第一個(gè)元素,返回被刪除的元素

reverse();反轉(zhuǎn)數(shù)組,并返回

sort()方法會(huì)調(diào)用每個(gè)數(shù)組項(xiàng)的 toString()轉(zhuǎn)型方法,然后比較得到的字符串,以確定如何排序??梢越邮芤粋€(gè)比較函數(shù)作為參數(shù),

function compare(value1, value2){ 
 return value2 - value1; 
} 
number.sort(compare);

splice()方法

let removed = colors.splice (2,2,"red","green") 
//刪除當(dāng)前數(shù)組索引2和3的項(xiàng),然后再?gòu)乃饕?開(kāi)始插入字符串"red"和"green", 
//可以將第二個(gè)參數(shù)2改為0,實(shí)現(xiàn)增加參數(shù)。
//返回被刪除的數(shù)據(jù)數(shù)組

不改變?cè)瓟?shù)組的方法

join()方法 數(shù)組轉(zhuǎn)字符串

let a = [1,2,3]
a.join('--')//"1--2--3"

concat()方法先創(chuàng)建當(dāng)前數(shù)組一個(gè)副本,然后將接收到的參數(shù)添加到這個(gè)副本的末尾,最后返回新構(gòu)建的數(shù)組

let colors2 = colors.concat("yellow", ["black", "brown"]); 

slice()方法返回起始和結(jié)束索引之間的項(xiàng)——但不包括結(jié)束位置的項(xiàng). [..)

let colors = ["red", "green", "blue", "yellow", "purple"]; 
let colors2 = colors.slice(1,4);
alert(colors2); //green,blue,yellow 

indexOf()和 lastIndexOf()

接受兩個(gè)參數(shù),查找的數(shù)組,起點(diǎn)位置(可選),從前或從后查找數(shù)據(jù)在數(shù)組的索引,如果不存在返回-1.

迭代方法

every():對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)每一項(xiàng)都返回 true,則返回 true。

filter():對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回該函數(shù)會(huì)返回 true 的項(xiàng)組成的數(shù)組。

forEach():對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù)。這個(gè)方法沒(méi)有返回值。

map():對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組。

some():對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)任一項(xiàng)返回 true,則返回 true。

這些方法都接受一個(gè)函數(shù),函數(shù)可接收三個(gè)參數(shù):數(shù)組項(xiàng)的值、該項(xiàng)在數(shù)組中的位置和數(shù)組對(duì)象本身。

let number = [1,2,3,4,5]
let result = number.every(function(item,index,array){
  return item>2;
)
alert(result);   //false

reduce()和 reduceRight()。
這兩個(gè)方法都接收兩個(gè)參數(shù):一個(gè)在每一項(xiàng)上調(diào)用的函數(shù)和(可選的)作為歸并基礎(chǔ)的初始值.
函數(shù)接收 4 個(gè)參數(shù):前一個(gè)值、當(dāng)前值、項(xiàng)的索引和數(shù)組對(duì)象。這個(gè)函數(shù)返回的任何值都會(huì)作為第一個(gè)參數(shù)自動(dòng)傳給下一項(xiàng)
使用 reduce()方法可以執(zhí)行求數(shù)組中所有值之和的操作,比如:

let values = [1,2,3,4,5]; 
let sum = values.reduce(function(prev, cur, index, array){ 
 return prev + cur; 
}); 
alert(sum); //15 

Set結(jié)構(gòu)

類(lèi)似于數(shù)組,但是成員的值都是唯一的。

兩個(gè)對(duì)象總是不等的,即使都是空對(duì)象{}。

NaN在這兒是被認(rèn)為重復(fù)的。

創(chuàng)建方法
const s = new Set(); 
基礎(chǔ)方法
s.add(value)://添加某個(gè)值,返回 Set 結(jié)構(gòu)本身。
s.delete(value)://刪除某個(gè)值,返回一個(gè)布爾值,表示刪除是否成功。
s.has(value)://返回一個(gè)布爾值,表示該值是否為Set的成員。
s.clear()://清除所有成員,沒(méi)有返回值。
遍歷方法

set里鍵名和鍵值被認(rèn)為一樣的

for (let x of s) {
  console.log(x);
}
s.forEach()://遍歷

字符串

string 類(lèi)型是不可變的,無(wú)論你在 string 類(lèi)型上調(diào)用何種方法,都不會(huì)對(duì)值有改變。
let myStr = "Bob";
myStr[0] = "J";
console.log(myStr)  //Bob
//改變 myStr 需要重新給它賦一個(gè)值:
let myStr = "Bob";
myStr = "Job";
str.split('')//字符串轉(zhuǎn)數(shù)組
str.concat("a","b");//返回連接后的字符串
str.indexOf("a",1);
//檢索一個(gè)字符串是否含有指定內(nèi)容,若有內(nèi)容,返回第一個(gè)索引值
//若沒(méi)有返回-1,第二個(gè)參數(shù)設(shè)置從哪個(gè)索引(包含)開(kāi)始查找
str.lastIndexOf("s",1)// 從后往前找
str.match((/b/g))或str.match("b") 
//檢索字符串以找到匹配的文本。
//如果沒(méi)找到任何匹配的文本,返回 null。
//如果找到
//1.如果 regexp(有標(biāo)志符g)。返回多個(gè)元素組成的數(shù)組。
//2.返回一個(gè)數(shù)組。該數(shù)組的第 0 個(gè)元素存放的是匹配文本,后面還有索引和str信息。
//["b", index: 1, input: "abbcb", groups: undefined]
str.replace((/b/g,'a')或str.replace('b','a')
//返回一個(gè)新的字符串,第一個(gè)參數(shù)的設(shè)置需被替換的內(nèi)容。
//不使用 regexp(有標(biāo)志符g),只會(huì)替換第一個(gè)匹配到的。
str.slice(6,11) 
//提取字符串,從 start 開(kāi)始(包括 start)到 end 結(jié)束(不包括 end),并以新的字符串返回被提取的部分。
//第二個(gè)參數(shù)可以不填就代表到最后,可以填負(fù)數(shù),如-1,表示到倒數(shù)第一個(gè)位置。填0或者小于第一個(gè)參數(shù)無(wú)返回值。
str.substring(3)//同上,但不接受負(fù)數(shù)
str.includes()://判斷是否找到參數(shù)字符串。
str.startsWith()://判斷參數(shù)字符串是否在原字符串的頭部。
str.endsWith()://判斷參數(shù)字符串是否在原字符串的尾部。
//以上三個(gè)方法都可以接受兩個(gè)參數(shù),需要搜索的字符串,和可選的搜索起始位置索引。返回布爾值
let string = "apple,banana,orange";
string.startsWith("banana",6)  // true

其他方法

String.formCharCode(20045);//根據(jù)字符編碼去獲取字符
str.charCodeAt(0); //返回字符的編碼
"Hello".repeat(2);  // "HelloHello"
//用于補(bǔ)全位數(shù):
console.log("h".padStart(5,"o"));  // "ooooh"
console.log("h".padStart(5));      // "    h"
console.log("h".padEnd(5,"o"));    // "hoooo"

模板字符串

用反引號(hào) ` 包裹字符串,模板字符串中的換行和空格都是會(huì)被保留
變量名寫(xiě)在 {} 中,{} 中可以放入 JavaScript 表達(dá)式

function f(){
  return "have fun!";
}
let string2= `Game start,${f()}`;
console.log(string2);  // Game start,have fun!

標(biāo)簽?zāi)0?/h4>

是一個(gè)函數(shù)的調(diào)用,其中調(diào)用的參數(shù)是模板字符串。

alert`Hello world!`;
// 等價(jià)于
alert('Hello world!');

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容