Js中的数组(一)数组类型检测的方法由于用typeof来检测数组类型,得到的是“object”,所以根本不能真正准确地检测出数组类型,可以自定义下面一种方法:var is_array = function(value){ return value && typeof value === "object" && value.constructor === Array; }; 但是,上面的函数在识别从不同的window或者frame中构造的数组时会失效,要想准确地检测外部数组类型,还需要进一步地完善该函数 var is_array = function(value){ return value && typeof value === 'object' && value.constructor === Array && typeof value.length === 'number' && typeof value.splice === 'function' && !(value.propertyIsEnumerable('length'));};下面这种方法也可以检测出来,而且更加简洁:var is_array = function(value){ return Object.prototype.toString.apply(value) ==='[object Array]';};(二)删除数组元素的方法删除数组元素有方法有很多种,最简单的方法就是利用length属性来截断数组,但是这种方法比较笨拙,仅能够在尾部截断数组元素,在JavaScript中,由于数组其实就是对象,因此使用delete运算符可以从数组中移除元素。例如:var number = [1,2,3,4,5,6]; delete number[2]; //1,2,undefined,4,5,6 这种删除数组的方法,只能删除指定位置下标的元素,并且会在数组中遗留一个空洞,这是因为排在被删除元素之后的元素仅保留了它们最初的名字(下标位置),而我们通常需要后面元素的下标值可以依次减一,也就是向前排一位。 这种效果可以用splice方法来实现,splice方法的第一个参数是数组中的一个序号,第二个参数是要删除的元素个数,任何额外的参数都会在序号那个点的位置被插入到数组中,例如: var number = [1,2,3,4,5,6]; number.splice(2,1);//1,2,4,5,6 (三)数组的排序函数sort() 按从小到大进行排序数组: function f(a,b){ return a-b; } var arr = [1,2,3,4,5,6]; arr.sort(f);按从大到小对数组进行排序:function f(a,b){ return b-a; } var arr = [1,2,3,4,5,6]; arr.sort(f);实现偶数排在前面,奇数排在后面: function f(a,b){ var a = a % 2; var b = b % 2; if(a==0) return -1; if(b==0) return 1; } var arr = [1,4,5,6,1,3,7,8]; arr.sort(f); console.log(arr); 若需要奇数排在前面,偶数排在后面: function f(a,b){ var a = a % 2; var b = b % 2; if(a==0) return 1; if(b==0) return -1; } var arr = [1,4,5,6,1,3,7,8]; arr.sort(f); console.log(arr); 不区分字母大小进行排序: function f (a,b){ var a = a.toLowerCase; var b = b.toLowerCase; if(a < b){ return; }else{ return -1;}}var arr = ["aB","Ab","Ba","bA"];arr.sort(f);(四)数组的下标 在JavaScript中,数组下标不一定必须是大于或者等于0的整数,可以为任意表达式,甚至可以是任意类型数据,但是使用length属性检测的时候,返回值为0,说明数组并没有增加长度,但是使用数组下标仍然可以得到相应的数组元素值,例如: var a = []; a[name] = 'Tom'; alert(a.length); // 0 alert(a[name]); // Tom(五)使用arguments模拟重载在javas中,每个函数内部都可以使用arguments对象,该对象包含了函数被调用时的实际参数值,arguments对象虽然在功能上和数组有些类似,但是它不是数组,arguments对象与数组的类似体现在他有一个length属性,同时实际参数的值可以通过[]操作符来获取,但是arguments对象并没有数组可以使用的push,pop,splice等方法,其原因是arguments对象的prototype只想的是object.prototype,而不死Array.prototype. 其他语言都支持方法重载,但是JavaScript并不支持这种方式的重载,这是因为JavaScript中的function对象也是以属性的形式出现的,在一个对象中增加与已有function同名的新function时,旧的function对象会被新的覆盖,不过可以通过使用arguments来模拟重载,其实现机制是通过判断arguments中实际参数的个数和类型来执行不同的逻辑。 例如: funtion sayHello(){ switch(arguments.length){ case 0: return "hello"; break; case 1: return "hello"+ arguments[0]; break; case 2: return "hello"+ arguments[0] + arguments[1]; break;}}