JS中判断对象是不是数组的方法
程序员文章站
2024-02-21 10:45:28
...
JavaScript中检测对象的方法
1. typeof操作符 (判断Function、String、Number、Undefined,Boolean)
利用typeof判断类型, 可以判断Function、String、Number、Undefined,Boolean;
利用typeof判断为object,不一定就是 {},也有可能是 [ ], null;
console.log(typeof 'abc'); //string
console.log(typeof 98); //number
console.log(typeof age); //undefined
console.log(typeof true); //bol
console.log(typeof function(){}); //function
console.log(typeof null); //object
console.log(typeof {}); //object
console.log(typeof []); //object
2. instanceof操作符 (可用于检测是否是数组)
instanceof运算符用于检测构造函数的prototype属性是否出现在对象的原型链中的任何位置
console.log([] instanceof Array); //true
console.log({} instanceof Array); //false
console.log({} instanceof Object); //true
console.log([] instanceof Object); //true
3.对象的constructor属性 (可用于检测是否是[ ]和{ })
所有对象都会从它的原型上继承一个 constructor 属性:
console.log({}.constructor === Object); // true
console.log({}.constructor === Array); //false
console.log([].constructor === Array); // true
console.log([].constructor === Object); //false
4.Object.prototype.toString
Object.prototype.toString的行为:首先,取得对象的一个内部属性,然后依据这个属性,返回一个类似于"[object Array]"的字符串作为结果. 利用这 个方法,再配合call,我们可以取得任何对象的内部属性,然后把类型检测转化为字符串比较,以达到我们的目的。
var arr = [1,2,3,1];
console.log(Object.prototype.toString.call(arr) === "[object Array]" ); //true
var obj = {};
console.log(Object.prototype.toString.call(obj) === "[object Object]"); //true
5.Array.isArray() (推荐)
检测一个值是否为数组。IE9+、 Firefox 4+、Safari 5+、Opera 10.5+和Chrome都实现了这个方法。但是在IE8之前的版本是不支持的
console.log(Array.isArray([])); //true
兼容浏览器写法
var arr = [1,2,3,1];
var arr2 = [{ abac : 1, abc : 2 }];
function isArrayFn(value){
if (typeof Array.isArray === "function") {
return Array.isArray(value);
}else{
return Object.prototype.toString.call(value) === "[object Array]";
}
}
alert(isArrayFn(arr));// true
alert(isArrayFn(arr2));// true