判断是否为数组的方法
-
instanceof,在只有一个全局执行环境时有效,如果网页包含多个框架,那实际上存在多个全局执行环境时,判断不准确。
-
Array.isArray(),克服了instanceof的问题。不过要在ie9+以上才能用。因此存在浏览器兼容问题
-
Object.prototype.toString.call(arr) === ‘[object Array]’; 可以写下面函数,直接给 Array 对象添加一个方法 isArray 方法。
(function(){ if(!Array.isArray){ Array.isArray = function(arr){ return Object.prototype.toString.call(arr) === '[object Array]'; } } })();
把一个运算数转换成 Number
-
常用的两个将字符串转数字的方法 Number() 与 parseInt() 区别
Number(),这个方法,是将一个字符串数或 true,false,null 转换成数字,其它转成 NaN。
parseInt(),把一个字符串转换成整数的函数。遇到非数字时,停止解析。有数返回数,没数返回NaN,解析数字时,还会默认根据数字前面的符号转换进制。例如 ‘08’ 就会根据前面的 0 转换成八进制,又因八进制中没有数字 8,就会解析成 0。因此在用这个方法的时候,最好添加上进制。例如:parseInt(‘08’, 10);就会根据 10 进制来转换。
-
判断一个值是否可用作数字的最佳方法是使用 isFinite() 函数。它会筛选掉 NaN 和 Infinity,isFinite() 也会像 Number() 一样试图把一个运算数转换为一个数字。
数组的方法整理
改变原数组的操作方法
- 尾部 加:push(), 减:pop();
- 头部 加:unshift(), 减:shift();
- 批量删除,插入。splice(index, howmany,item1,……itemX)
- 反转数组 reverse()
- 排列数组 sort()
不改变原数组的操作方法,返回新数组
- join(‘’) 将数组串成字符串
- slice() 截取部分数组,返回新数组
- concat() 合并数组,也经常用作复制数组
- map() 遍历数组,做操作,形成数据,然后返回一个新数组,如果没设返回值,则返回一个等长的数组,数组每一项的值都是 undefined
var arr = [1,[2,3],[[4,5],6],7];//把数组变成一维数组
console.log(arr.toString().split(',').map(function(x){
return Number(x);
}));//返回[1,2,3,4,5,6,7]
console.log(arr.toString().split(',').map(function(x){
alert(x);
}));//分别弹出1,2,3,4,5,6,7,最后返回[undefined,undefined.....]7项
//因为map()方法返回的是一个数组,方便做链式操作。
- forEach() 遍历数组,做操作,最后返回 undefined
- filter() 判断数组的每一项是否符合某个条件,为 true 时,返回该项,最后形成新数组
- every() 判断数组的每一项是否附合某一条件,全部附合,返回 true,否则 false
- some() 判断数组是否有一项附合某一条件,有一项附合,返回 true,否则 false
注:map(),filter(),forEach() 不能中断遍历;如果需要中断,可以灵活运用 some() ,或用 for 循环