Object
// 以下两种表示方式一样
var p = new Object();
var p = {};
//对象属性可用.访问,也可以用方括号
p.name 等同于 p['name'],后一种方式用在特殊情况如
p['first name']//名称中有空格,无法用.访问
Array
js中数组的两个特点:
- 数组每一项类型可以不同
- 数组大小可以动态调整
- 数组最大可以容纳 4294967295个项
var ls = new Array();
var ls = new Array(4);
var ls = new Array('aaa','bbb','ccc');
var ls = [];
var ls= ['aaa','bbb','ccc'];
//数组检测(用ES5 isArray方法)
Array.isArray(ls) // true
var a = [1,2,3,4,5,65];
a.toString();//输出逗号分隔的字符串 "1,2,3,4,5,65"
a.valueOf();//依然输出数组 [1, 2, 3, 4, 5, 65]
a.join('$');//join只接收一个参数,即分隔符 "1$2$3$4$5$65"
数组的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]
数组的FILO(队列)操作:
a.shift(); // [2,3,4,5,6,7,8];
a.unshift(100); //[100,2,3,4,5,6,7,8];
数组的排序
-sort方法可以传入一个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);
数组的操作方法:
-
concat方法为当前数组穿件一个新副本,若传入参数,则将传入的每一项添加到这个副本的末尾。slice方法根据传入的下标产生新数组
-
<u> concat和slice方法都不会对原来的数组产生影响</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(起始位置,要删除的项的个数, 要插入的任意数量项...),返回值是被删除的项,若没有项删除则返回一个空数组
let a = [1,2,3,4,5,6];
let removed = a.splice(1,2);// 从下标1开始,包括1,删除2个元素
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 ]
-
数组的迭代方法
every(),some(),filter(),forEach(),map()
这些方法都不会修改原始数组
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: 返回一个新数组,这个数组的每一项都是在原始数组中的对应项上运行传入函数的结果
let result = a.map(function(element, index, array) {
return element * 2;
});
console.log(result);//[ 2, 4, 6, 8, 10, 12 ]
//forEach,类似for
-
数组的归并方法
Recude(), reduceRight()
迭代数组每一项,最后构建一个返回值,reduce从第一项开始,reduceRight从最后一项开始
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