Object
1.创建Object实例的方式有两种:
var person=new Object();
person.name="zx";
person.age=19;
对象字面量表示法:
var person={
name:"zx",
age:19
};
住意每两个属性中间用逗号分隔,最后一个属性后面没有逗号,结尾要加分号。
2.访问对象属性时,可以使用点表示法,也可以使用方括号表示法。在使用后者时,要注意属性要放在引号内。
使用方括号表示法的优点是:可以通过变量访问属性,或属性名中含有空格等字符。
Array
ECMAscript数组的每一项都可以保存任何类型的数据,且其大小是动态调整的。
几种构造方式:
var arr=new Array();
var arr=new Array(10);
var arr=new Array("red","black","white");
//数组字面量表示法
var arr=[];
var arr=["red","black","white"];
通过length属性可以得到数组的当前长度:
var arr=["red","black","white"];
arr[arr.length]="pink";
arr.length=2;
alert(arr[2])//undefined
arr[99]=19;
alert(arr.length);//100
1.检测数组
使用instanceof的问题在于,它假定只有一个全局环境。可以用如下方法检测数组:
if(Array.isArray(value)){
dosomething();
}
2.转换方法
toString()、toLocaleString()、valueOf()。
调用数组的toString方法会返回一个由数组中每个值的字符串形式拼接而成的以逗号分隔的字符串,这个方法实际上会调用每一项的toString方法。调用toLocaleString方法类似,区别在于它会调用每一项的toLocaleString方法。调用valueOf方法返回的还是数组。
var arr=["red","black","white"];
alert(arr.toString());//"red,black,white"
join()可以接受一个参数,将其作为分隔符:
var arr=["red","black","white"];
alert(arr.join("&"));//"red&blck&white"
3.栈方法
push()可以接受任意数量的参数,将它们添加到数组的末尾,并返回数组的长度。
pop()则移除数组的最后一项,并返回移除的项。
var arr=["red"];
arr.push("black","white");
alert(arr.length);//3
var item=arr.pop();
alert(item);//"white"
4.队列方法
shift()能够移除数组中的第一个项并返回。
unshift()能够在数组前端添加任意个项并返回长度。
结合使用shift()和push()可以模拟队列;
结合使用unshift()和pop()可以模拟反向队列。
var arr=["red"];
alert(arr.unshift("black","white"));//"black,white,red"
alert(arr.shift());//"white,red"
5.重排序方法
一个是reverse()。
var arr=[1,2,3,4,5];
arr.reverse();
alert(arr);//[5,4,3,2,1]
另一个是sort()。它接受一个比较函数,用以指定排序规则。
比较函数接受两个参数,如果第一个参数应在第二个参数之前则返回一个负数,如果相等则返回0,如果第一个参数应在第二个参数后则返回一个正数:
function compare(value1,value2){
if(value1<value2){
return -1;
}else if(value1==value2){
return 0;
}else
return 1;
}
var arr=[1,9,2,7,3];
arr.sort(compare);
alert(arr);//[1,2,3,7,9]
如果是数值型数组的话,还可以简化:
function compare(value1,value2){
return (value1-value2);
}
6.操作方法
第一个是concat()。
var arr=["red"];
arr.concat("black","white");
alert(arr);//["red","black","white"]
第二个是slice()。接受一个参数时,返回数组中从该项开始到结束的所有项;接受两个参数时,返回数组中位于这两项之间的所有项,但不包括结束位置的项。该方法不会影响原始数组。
var arr=[1,2,3,4,5,6];
alert(arr.slice(2));//[3,4,5,6]
alert(arr.slice(2,4));//[3,4]
第三个是splice()。接受两个参数时,第一个参数表示起始位置,第二个参数表示要删除的数目。接受两个以上参数时,第一个表示起始位置,第二个表示要删除的个数,后面的表示要插入的项(⊙﹏⊙)b
var arr=[1,2,3,4,5,6];
arr.splice(1,3);
alert(arr);//[1,5,6]
arr=[1,2,3,4,5,6];
arr.splice(1,0,6,6,6);
alert(arr);//[1,6,6,6,2,3,4,5,6]
arr=[1,2,3,4,5,6];
arr.splice(1,2,6,6,6);
alert(arr);//[1,6,6,6,4,5,6]
7.位置方法
有两个:indexOf()和lastIndexOf()。接受两个参数:要查找的项和(可选的)查找起点。显然,第一个从头开始找,第二个从尾开始找。要注意的是,在查找时用的是严格相等(===)。
var arr=[1,2,3,4,5,4,3,2,1];
alert(arr.indexOf(4));//3
alert(arr.lastIndexOf(4));//5
alert(arr.indexOf(4,4));//5
alert(arr.lastIndexOf(4,4));//3
alert(arr.indexOf(10));//-1
8.迭代方法
第一个:every()。接受两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象。给定的函数接受三个参数:数组项的值,该项在数组中的位置和数组对象本身。该方法对数组中的每一项运行给定函数,如果每一项都返回true,则返回true:
var arr=[1,2,3,4,5,6,7];
var reslut=arr.every(function(item,index,array){
return (item>2);
});
alert(result);//false
第二个:some()。和every()类似,区别在于只要有一项返回true,结果就返回true。
var arr=[1,2,3,4,5,6,7];
var reslut=arr.some(function(item,index,array){
return (item>2);
});
alert(result);//true
第三个:filter()。该方法会返回一个数组,该数组由那些函数返回值为true的项组成。
var arr=[1,2,3,4,5,6,7];
var reslut=arr.filter(function(item,index,array){
return (item>2);
});
alert(result);//[3,4,5,6,7]
第四个:map()。该方法返回一个数组,该数组由每一项运行函数后的结果组成。
var arr=[1,2,3,4,5,6,7];
var reslut=arr.map(function(item,index,array){
return (item*2);
});
alert(result);//[2,4,6,8,10,12,14]
第五个是:forEach()。该方法没有返回值,只是对每一项运行函数而已。
9.归并方法
有两个:reduce()和reduceRight()。该方法会迭代数组的所有项,然后返回一个最终值。前者从头开始,后者从尾开始。接受两个参数:在每一项上运行的函数和(可选的)作为归并基础的初始值。函数接受4个参数:前一个值、当前值、项的索引和数组对象。函数的返回值会作为第一个参数传给下一项。
var arr=[1,2,3,4,5];
var result=arr.reduce(function(prev,cur,index,array){
return (prev+cur);
});
alert(result);//15