數(shù)組
基本使用和一些常用方法
var arr = [1,2,3,4.5,6,7,8] //數(shù)組成員用逗號(hào)隔開(kāi)纠俭。注意冤荆!不要以逗號(hào)結(jié)尾!在不同瀏覽器環(huán)境下容易造成未知錯(cuò)誤乌妒!
var arr = [0] //將數(shù)組設(shè)置為0外邓,則可以清空數(shù)組
var arr = [3, 4, 5, 6] //定義數(shù)組并賦值
console.log(arr.length) //4撤蚊;獲取數(shù)組的長(zhǎng)度
console.log(arr[0]) //3;獲取數(shù)組的第一個(gè)成員损话,數(shù)組計(jì)數(shù)從0開(kāi)始侦啸,[0]即是第一位
console.log(arr[3]) //6;獲取數(shù)組的第4個(gè)成員
console.log(arr[4]) //undefined丧枪;未定義數(shù)組的第五個(gè)成員光涂,輸出undefined
arr[4] = 'hello' //將'hello'給數(shù)組第五個(gè)成員賦值
console.log(arr[4]) // 輸出數(shù)組第五位成員'hello'
arr.push('jirengu') //在數(shù)組最后添加一個(gè)元素'jirengu'
console.log(arr) // [3, 4, 5, 6, 'hello', 'jirengu'] 輸出數(shù)組
var value = arr.pop() //把數(shù)組最后一位彈出來(lái),返回拧烦,賦值給value
console.log(value) //'jirengu'
console.log(arr) //[3, 4, 5, 6, 'hello']忘闻,已經(jīng)通過(guò)pop操作恋博,彈出了數(shù)組最后一個(gè)成員'jirengu'
arr.unshift('aoao') //在數(shù)組第一位新增
console.log(arr) //['aoao', 3, 4, 5, 6, 'hello']
var value2 = arr.shift() //把數(shù)組第一位拿出來(lái)返回齐佳,數(shù)組發(fā)生變化
console.log(value2) // 'aoao'
console.log(arr) //[3, 4, 5, 6, 'hello']
var arr2 = arr.splice(1, 2) //從下標(biāo)為1的元素開(kāi)始,拿出來(lái)2個(gè)元素作為一個(gè)數(shù)組返回债沮,原數(shù)組發(fā)生改變
console.log(arr) // [3, 6, 'hello']
console.log(arr2) // [4, 5]
arr.splice(1, 0, 8,9) //從下標(biāo)為1的位置開(kāi)始炼吴,刪除0個(gè),新增兩個(gè)元素(在下標(biāo)為1的位置前面新增8,9)
console.log(arr) //[3, 8, 9, 6, 'hello']
var arr3 = arr.slice(2,3) //從 arr 下標(biāo)為2開(kāi)始秦士,到下標(biāo)為3結(jié)束(不包括3),做為新數(shù)組永高,不對(duì)原數(shù)組進(jìn)行操作隧土,原數(shù)組不變
console.log(arr3) // [9]
console.log(arr) //[3, 8, 9, 6, 'hello']
var str = arr.join('-') //將數(shù)組成員用-連接起來(lái)提针。’-‘可以是其他符號(hào)
console.log(str) // "3-8-9-6-hello"
var arr4 = [3, 5, -1, 18, 9, 27]
arr4.reverse() //倒序曹傀,本身發(fā)生變化
arr4.sort(function(v1, v2){ //排序辐脖,本身發(fā)生變化
return v1-v2; //v2-v1
})
排序 sort
sort方法用于對(duì)數(shù)組進(jìn)行排序,當(dāng)沒(méi)有參數(shù)的時(shí)候會(huì)按字母表升序排序皆愉,如果含有undefined,undefined會(huì)被排到最后面嗜价,對(duì)象元素則會(huì)調(diào)用其toString方法.
sort會(huì)改變?cè)瓟?shù)組
var a=[5,4,3,2,1];
a.sort();
console.log(a);//[1, 2, 3, 4, 5]
var a = [7,8,9,10,11];
對(duì)于這個(gè)數(shù)組,直接使用a.sort方法會(huì)得出[10, 11, 7, 8, 9]的結(jié)果幕庐,因?yàn)槟J(rèn)情況下是比較數(shù)組成員的ASCII碼進(jìn)行排序久锥,此時(shí)需要傳入自定義排序函數(shù)
a.sort(function(v1,v2){
return v1-v2;
});//該函數(shù)的作用是比較v1,v2數(shù)值的大小,若v1-v2大于零异剥,則兩個(gè)數(shù)組元素需要調(diào)換位置瑟由。
console.log(a);//[7, 8, 9, 10, 11]
ES5數(shù)組
Array.isArray(obj)
這個(gè)函數(shù)是一個(gè)靜態(tài)函數(shù),用來(lái)判斷一個(gè)對(duì)象是不是數(shù)組
var a = [1,2,3,4,5];
var b = new Date();
console.log(Array.isArray(a)); //true
console.log(Array.isArray(b)); //false
.indexOf(element) / .lastIndexOf(element)查找指定元素
這兩個(gè)方法用于查找數(shù)組內(nèi)指定元素位置冤寿,查找到第一個(gè)指定元素后返回其索引歹苦,沒(méi)有查找到返回-1,indexOf從頭至尾搜索督怜,lastIndexOf反向搜索殴瘦。
var a = [1,2,3,4,3,2,1];
console.log(a.indexOf(2)); //1
console.log(a.lastIndexOf(2)); //5
console.log(a.lastIndexOf(0)); //-1;沒(méi)有查找到,返回-1
.forEach(element, index, array)
遍歷數(shù)組參數(shù)為一個(gè)回調(diào)函數(shù)号杠,回調(diào)函數(shù)有三個(gè)參數(shù):
當(dāng)前元素蚪腋,當(dāng)前元素索引值,整個(gè)數(shù)組
這個(gè)函數(shù)的遍歷功能可以在大多數(shù)需要遍歷讀取數(shù)組的情況下使用究流,靈活運(yùn)用可以有效減少代碼量和工作量
var a = new Array(1,2,3,4,5,6);
a.forEach(function(e,i,array){
array[i]= e * e;
});//遍歷數(shù)組中的每一個(gè)元素辣吃,對(duì)其進(jìn)行求平方操作。
console.log(a);//[1, 4, 9, 16, 25, 36]
var b = ['a','b','c',1,2,3];
b.forEach(function(e,i,array){
array[i]='' + array[i] + array[i];//單引號(hào)寫(xiě)在前面芬探,可以使運(yùn)算變成字符串拼接
});//b = [" aa", " bb", " cc", " 11", " 22", " 33"]
.every(function(element, index, array)) / .some(function(element, index, array))
這兩個(gè)函數(shù)對(duì)數(shù)組進(jìn)行邏輯判定神得,回調(diào)函數(shù)返回一個(gè)布爾值
every是所有函數(shù)的每個(gè)回調(diào)函數(shù)都返回true的時(shí)候才會(huì)返回true,當(dāng)遇到false的時(shí)候終止執(zhí)行偷仿,返回false
some函數(shù)是“存在”有一個(gè)回調(diào)函數(shù)返回true的時(shí)候終止執(zhí)行并返回true哩簿,否則返回false
var a=new Array(1,2,3,4,5,6);
console.log(a.every(function(e, i, arr){
return e < 6;
}));//返回false
console.log(a.some(function(e,i,arr){
return e > 4;
})); //返回true
.map(function(element))
與forEach類(lèi)似,遍歷數(shù)組酝静,回調(diào)函數(shù)返回值組成一個(gè)新數(shù)組返回节榜,新數(shù)組索引結(jié)構(gòu)和原數(shù)組一致,原數(shù)組不變
var a = new Array(1,2,3,4,5,6);
console.log(a.map(function(e){
return e * e;
})); // [1, 4, 9, 16, 25, 36]
console.log(a); //[1, 2, 3, 4, 5, 6] 對(duì)原數(shù)組不產(chǎn)生影響
.filter(function(element))
返回?cái)?shù)組的一個(gè)子集别智,回調(diào)函數(shù)用于邏輯判斷是否返回宗苍,返回true則把當(dāng)前元素加入到返回?cái)?shù)組中,false則不加
新數(shù)組只包含返回true的值,索引缺失的不包括讳窟,原數(shù)組保持不變
var a = new Array(1,2,3,4,5,6);
console.log(a.filter(function(e){
return e % 2 == 0;
})); // [2, 4, 6]
var b = a.filter(function(e){
return e % 2 == 0;
}); // [2, 4, 6]
console.log(a); //[1, 2, 3, 4, 5, 6]
console.log(b); //[2,4,6]
.reduce(function(v1, v2), value) / .reduceRight(function(v1, v2), value)
遍歷數(shù)組让歼,調(diào)用回調(diào)函數(shù),將所有數(shù)組元素組合成一個(gè)值丽啡,合成方法視情況而定
reduce從索引最小值開(kāi)始谋右,reduceRight反向,方法有兩個(gè)參數(shù)
回調(diào)函數(shù):把兩個(gè)值合為一個(gè)补箍,返回結(jié)果
value改执,一個(gè)初始值,可選
var a = new Array(1,2,3,4,5,6);
console.log(a.reduce(function(v1, v2){
return v1 * v2;
})); // 720;將所有元素相乘
console.log(a.reduceRight(function(v1, v2){
return v1 - v2;
}, 100)); // 79
字符串
字符串就是零個(gè)(空字符串)或多個(gè)排在一起的字符,放在單引號(hào)或雙引號(hào)之中坑雅。
如果要在單引號(hào)字符串的內(nèi)部辈挂,使用單引號(hào)(或者在雙引號(hào)字符串的內(nèi)部,使用雙引號(hào))霞丧,就必須在內(nèi)部的單引號(hào)(或者雙引號(hào))前面加上反斜杠呢岗,用來(lái)轉(zhuǎn)義。
如
var str = '\'Hello\''
//str = 'Hello'
注意:斜線和需要轉(zhuǎn)義的字符構(gòu)成一個(gè)字符蛹尝,而不是兩個(gè)后豫。
如果想在輸出的字符串中包含斜杠本身,即將斜杠本身進(jìn)行轉(zhuǎn)義突那,即
var str = '\\Hello\\'
//str = '\Hello\'
換行
如果想在定義字符串時(shí)換行(字符串不允許分行定義)挫酿,需要在換行時(shí)對(duì)換行進(jìn)行轉(zhuǎn)義,即在換行前加斜杠(轉(zhuǎn)義符號(hào)之后再也不可以添加任何字符愕难,包括但不限于數(shù)字早龟,字母,符號(hào)猫缭,空格)
var str = 'long \
long \
ago'
// str = 'long long ago'
或者可以使用連接運(yùn)算符(+
)連接多個(gè)單行字符串
var longString = 'Long '
+ 'long '
+ 'long '
+ 'string';
ES6提供了一種新的允許字符串換行的方法葱弟,如下
var str = `str1
str2
str3
`
// str = "str1
str2
str3
"
常見(jiàn)的字符串方法
長(zhǎng)度計(jì)算,拼接
var str = "hello";
//定義字符串變量str
console.log( str.length );
//獲取字符串長(zhǎng)度
console.log( str[0] );
//獲取字符串的第一位
console.log( str[str.length - 1] );
//獲取字符串的最后一位
console.log( str.charAt(0) );
//獲取字符串的第一位
console.log( str.charCodeAt(0) );
//返回字符串第一個(gè)字符的 Unicode 編碼
var str2 = " world";
var str3 = str1 + str2;
//拼接字符串str1和str2
cosnole.log( str3 );
//
字符串截取
var str = "hello world";
var sub1 = str.substr(1, 3); // 第一個(gè)是開(kāi)始位置猜丹, 第二個(gè)是長(zhǎng)度 截取結(jié)果是字符串'ell'
var sub2 = str.substring(1, 3); // 第一個(gè)是開(kāi)始位置芝加,第二個(gè)是結(jié)束位置,長(zhǎng)度為第二個(gè)-第一個(gè) el
var sub3 = str.slice(1, 3); // 同上 允許負(fù)參
查找
var str = "hello my world";
var s1 = str.search('my'); //查找到字符串起始位置為6 找不到則返回結(jié)果-1
var s2 = str.replace('my', 'your'); //將查找到的字符串'my'替換為'your'
var s3 = str.match('my'); //返回匹配的數(shù)組
大小寫(xiě)
var str = "Hello";
str.toUpperCase();//使字符串變?yōu)榇髮?xiě)
str.toLowerCase();//使字符串變?yōu)樾?xiě)射窒,兩種方法均不對(duì)原字符串進(jìn)行操作