JavaScript中Array类型的检测和方法

  instanceof 操作符可以检测对象的具体类型,如下:

if (value instanceof Array){
//对数组执行某些操作
}

  但问题是 instanceof 判断的依据是基于原型链去查找Array()构造函数。若只有一个全局执行环境,instanceof 确实可以判断。若网页包含多个框架,实际上存在多个全局执行环境,不同框架之间传入数组,判断的结果是不准确的。

  Array.isArray()方法是最终确定某个值到底是不是数组,而不管它是在哪个全局执行环境中创建的,用法如下:

if (Array.isArray(value)){
//对数组执行某些操作
}

  

  Array() 的转换方法:toLocaleString()、 toString()、join()、valueOf()方法。前两个返回的是以逗号隔开的字符串,join()只接受一个参数作为分隔符并返回字符串,最后一个返回的是数组。前两个的区别如下:

var person1 = {
    toLocaleString : function () {
        return "Nikolaos";
    },
    toString : function() {
        return "Nicholas";
    }
};

var person2 = {
    toLocaleString : function () {
        return "Grigorios";
    },
    toString : function() {
        return "Greg";
    }
};

var people = [person1, person2];
alert(people); //Nicholas,Greg
alert(people.toString()); //Nicholas,Greg
alert(people.toLocaleString()); //Nikolaos,Grigorios                

  栈方法:push()和 pop(),其功能是在数组尾部添加任意的项和去除最后一项。

  队列方法:unshift()和shift(),其功能是在数组头部添加任意的项和去除第一项。

  重排序方法:reverse()和sort()。reverse()方法是反转数组顺序。默认下,sort()方法按升序排列数组项——即最小的值位于最前面,最大的值排在最后面。sort()接受一个比较函数,以便确定怎么排序。如下:

function compare(value1, value2) {
    if (value1 < value2) {
        return 1;
    } else if (value1 > value2) {
        return -1;
    } else {
        return 0;
    }
}

var values = [0, 5, 1, 10, 15];
values.sort(compare);
alert(values); // 15,10,5,1,0

  操作方法:concat()方法可以基于当前数组中的所有项及传入的参数创建一个新数组。

slice()方法能够基于当前数组中的一或多个项创建一个新数组。 slice()方法可以接受一或两个参数,即要返回项的起始和结束位置,若只有一个参数,返回从该参数指定位置开始到当前数组末尾的所有项。

splice()方法主要用途是向数组的中部插入项。第一个参数是指定数组位置,第二个是从指定位置向后 n(传入值)项,第三个至第n项参数是从指定位置插入.

var colors = ["red", "green", "blue"];
var removed = colors.splice(0,1); // 删除第一项
alert(colors); // green,blue
alert(removed); // red,返回的数组中只包含一项

removed = colors.splice(1, 0, "yellow", "orange"); // 从位置 1 开始插入两项 alert(colors); // green,yellow,orange,blue alert(removed); // 返回的是一个空数组

removed = colors.splice(1, 1, "red", "purple"); // 插入两项,删除一项 alert(colors); // green,red,purple,orange,blue alert(removed); // yellow,返回的数组中只包含一项

  位置方法:indexOf()和 lastIndexOf()。这两个方法都接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中, indexOf()方法从数组的开头(位置 0)开始向后查找, lastIndexOf()方法则从数组的末尾开始向前查找。

  迭代方法:every()、filter()、foreach()、map()和some()。每个方法都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象——影响 this 的值。

  every():对数组中的每一项运行给定函数,如果该函数对每一项都返回 true,则返回 true。
  filter():对数组中的每一项运行给定函数,返回该函数会返回 true 的项组成的数组。
  forEach():对数组中的每一项运行给定函数。这个方法没有返回值。
  map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
  some():对数组中的每一项运行给定函数,如果该函数对任一项返回 true,则返回 true。

  归并方法:reduce()和 reduceRight()。reduce()方法从数组的第一项开始,逐个遍历到最后。而 reduceRight()则从数组的最后一项开始,向前遍历到第一项。这两个方法都接收两个参数:一个在每一项上调用的函数和(可选的)作为归并基础的初始值。调用的函数接收4个参数:前一个值、当前值、项的索引和数组对象。

posted @ 2018-08-31 11:49  雨雾漫步  阅读(243)  评论(0编辑  收藏  举报