Object
// 以下兩種表示方式一樣
var p = new Object();
var p = {};
//對象屬性可用.訪問污桦,也可以用方括號
p.name 等同于 p['name']亩歹,后一種方式用在特殊情況如
p['first name']//名稱中有空格,無法用.訪問
Array
js中數(shù)組的兩個(gè)特點(diǎn):
- 數(shù)組每一項(xiàng)類型可以不同
- 數(shù)組大小可以動(dòng)態(tài)調(diào)整
- 數(shù)組最大可以容納 4294967295個(gè)項(xiàng)
var ls = new Array();
var ls = new Array(4);
var ls = new Array('aaa','bbb','ccc');
var ls = [];
var ls= ['aaa','bbb','ccc'];
//數(shù)組檢測(用ES5 isArray方法)
Array.isArray(ls) // true
var a = [1,2,3,4,5,65];
a.toString();//輸出逗號分隔的字符串 "1,2,3,4,5,65"
a.valueOf();//依然輸出數(shù)組 [1, 2, 3, 4, 5, 65]
a.join('$');//join只接收一個(gè)參數(shù)凡橱,即分隔符 "1$2$3$4$5$65"
數(shù)組的LIFO(棧)操作:
var a = [1,2,3,4,5,6];
a.push(7);
a.push(8,9); // [1,2,3,4,5,6,7,8,9]
a.pop(); // [1,2,3,4,5,6,7,8]
數(shù)組的FILO(隊(duì)列)操作:
a.shift(); // [2,3,4,5,6,7,8];
a.unshift(100); //[100,2,3,4,5,6,7,8];
數(shù)組的排序
-sort方法可以傳入一個(gè)compare方法小作,制定排序的方法
let a = [2,1,5,9,0];
//a.reverse();
function sortByAsc(value1,value2){
return value1-value2>0;
}
function sortByDesc(value1,value2){
return value1-value2<0;
}
a.sort(sortByAsc); //[0,1,2,5,9]
a.sort(sortByDesc);//[9,5,2,1,0]
console.log(a);
數(shù)組的操作方法:
-
concat方法為當(dāng)前數(shù)組穿件一個(gè)新副本,若傳入?yún)?shù)稼钩,則將傳入的每一項(xiàng)添加到這個(gè)副本的末尾顾稀。slice方法根據(jù)傳入的下標(biāo)產(chǎn)生新數(shù)組
-
<u> concat和slice方法都不會對原來的數(shù)組產(chǎn)生影響</u>
slice(1,3)包括1和2,不包括3
let a = [2,1,5,9,0];
let b = ['aaa','bbb','ccc'];
let c = a.concat(b);
let d = c.slice(0,4);
console.log(c,d); //[ 2, 1, 5, 9, 0, 'aaa', 'bbb', 'ccc' ] [ 2, 1, 5, 9 ]
console.log(a); //[ 2, 1, 5, 9, 0 ]
-
splice(起始位置,要?jiǎng)h除的項(xiàng)的個(gè)數(shù), 要插入的任意數(shù)量項(xiàng)...),返回值是被刪除的項(xiàng)坝撑,若沒有項(xiàng)刪除則返回一個(gè)空數(shù)組
let a = [1,2,3,4,5,6];
let removed = a.splice(1,2);// 從下標(biāo)1開始静秆,包括1,刪除2個(gè)元素
console.log(a,removed); // [ 1, 4, 5, 6 ] [ 2, 3 ]
let removed = a.splice(1,0);// [ 1,2,3, 4, 5, 6 ] [ ]
let removed = a.splice(1,1,666,777,888); //[ 1, 666, 777, 888, 3, 4, 5, 6 ] [ 2 ]
-
數(shù)組的迭代方法
every(),some(),filter(),forEach(),map()
這些方法都不會修改原始數(shù)組
let a = [1, 2, 3, 4, 5, 6];
//every
let result = a.every(function(element, index, array) {
return element > 2
});
console.log(result);//false
//some
let result = a.some(function(element, index, array) {
return element > 2
});
console.log(result);//true
//filter
let result = a.filter(function(element, index, array) {
return element > 2
});
console.log(result);//[ 3, 4, 5, 6 ]
//map: 返回一個(gè)新數(shù)組巡李,這個(gè)數(shù)組的每一項(xiàng)都是在原始數(shù)組中的對應(yīng)項(xiàng)上運(yùn)行傳入函數(shù)的結(jié)果
let result = a.map(function(element, index, array) {
return element * 2;
});
console.log(result);//[ 2, 4, 6, 8, 10, 12 ]
//forEach抚笔,類似for
-
數(shù)組的歸并方法
Recude(), reduceRight()
迭代數(shù)組每一項(xiàng),最后構(gòu)建一個(gè)返回值侨拦,reduce從第一項(xiàng)開始殊橙,reduceRight從最后一項(xiàng)開始
let a = [1, 2, 3, 4, 5, 6];
let result = a.reduce(function(preview,current,index,array){
console.log('preview: '+ preview, ' current: '+current,
'\nindex: '+index,' array: '+array);
return preview+current;
});
console.log(result);
// preview: 1 current: 2
// index: 1 array: 1,2,3,4,5,6
// preview: 3 current: 3
// index: 2 array: 1,2,3,4,5,6
// preview: 6 current: 4
// index: 3 array: 1,2,3,4,5,6
// preview: 10 current: 5
// index: 4 array: 1,2,3,4,5,6
// preview: 15 current: 6
// index: 5 array: 1,2,3,4,5,6
// 21