1 isArray方法
该方法是Array对象的静态方法,用来判断一个值是否为数组,它可以弥补typeof运算符的不足。
用法是Array.isArray(array实例)
通用的判断对象数据类型的方法是Object.prototype.toString.call(obj) === "[object type]",
比如 Object.prototype.toString.call([1,2,3]) === "[object Array]"
2 Arry实例的方法
toString:把数组转换为字符串,并返回结果。
var arr = [1,2,3];
arr.toString()//"1,2,3"
上面可以看出一个小技巧:通过toString方法可以直接将数组分割为逗号链接的字符串,结果跟arr.join()差不多。
push:向数组的末尾添加一个或更多元素,并返回新的长度。
var arr = [1,2,3];
arr.push.apply(arr, [4,5]);//[1,2,3,4,5]
// arr.push.call(arr, [6,7])的结果呢?[1,2,3,4,5,[6,7]]
你知道为什么上面的结果是[1,2,3,4,5]么?因为Function.prototype.apply方法的第二个参数是个数组或者类数组,我现在传的是个数组,apply方法会认为我要传二个参数,相当于是执行arr.push(4,5).
join:把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
大家知道通过call或者apply方法可以调用别的对象(比如Array)的方法,那么字符串对象也可以调用Array的join方法,看下面:
var s = "mengxiang";
[].join.call(s, "-") //"m-e-n-g-x-i-a-n-g"
concat:连接两个或更多的数组,并返回结果。
注意事项:当数组中包含对象时,新的数组中包含的是对象的引用,很多人称之为浅拷贝。
var o = {a:1};
var oldArray = [o];
var newArray = oldArray.concat();//[{a:1}]
o.a = 2;
newArray; //[{a:2}]
从上面的例子可以看到,当修改对象的成员的值时,newArray的值也随之改变了,可以验证我们的结论。
slice:从某个已有的数组返回选定的元素,组成新的数组返回,不修改原数组
小技巧:将类数组转化为数组,[].slice.call(arguments);
sort:对数组的元素进行排序,默认是按照字典顺序排序
arrs = [101,1001,10001,111]
arrs.sort()//[10001, 1001, 101, 111]
sort支持函数作为第一个参数,该函数本身又接受两个参数,表示进行比较的两个元素。如果返回值大于0,表示第一个元素排在第二个元素后面;其他情况下,都是第一个元素排在第二个元素前面。