js检测变量是否为一个数组的几种方法
作者:齐, 维维instanceof、constructor 两种方法判断存在误差,不建议使用;Array.isArray()内置于浏览器中,运行效率比较高,实际操作中建议先判断浏览器是否支持Array.isArray(),之后在用Obejct.prototype.toString()方法。
一、instanceof
objectName instanceof Array
例:
var arr = [4,67,23];
arr instanceof Array //return true
二、constructor
例:
var arr = [];
arr.constructor === Array ruturn true
ps :因为constructor可以被重写,所以不能确保一定是数组
例: var str = ‘abc‘;
str.constructor = Array;
str.constructor === Array // return true
ps :而很明显str不是数组
三、Array.isArray()
ps:新增方法、存在兼容性问题
兼容性:IE9+、Firefox4+、Safari5+、Opera10.5+、Chrome
四、Object.prototype.toString.call()
例:
var arr = [34,65,1];
Object.prototype.toString.call(arr) === ‘[object Array]’ //return true
五、整合
var arr = [1,3];
function isArray(value) {
if (typeof Array.isArray === “function”) {
return Array.isArray(value);
}else {
return Object.prototype.toString.call(value) === “[object Array]”;
}
}
alert(isArrayFn(arr));// true