欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

参考链接 https://www.cnblogs.com/heshan1992/p/6927690.html