js判断一个对象是否为数组

1,真正的数组的判断方法

javascript中最简单的声明数组方法为:
var a = [];
判断是否为数组的最直接的方法为:

复制代码 代码如下:

a instanceof Array //true
a .constructor == Array //true

这里涉及到一个instanceof语法,instanceof是一个云算符,与"+-*/"一样,它的语法如下:
result = obj intanceof class
是用来判断一个对象是否是某个class的一个实例,运算结果返回true或者false。javascript中class的定义又是通过构造函数进行初始化的,所以instanceof语法的右操作符class一定是Function的实例,即class
instanceof
Function一定为true,而且如果使用instanceof时右操作符不是Function,就会抛出TypeError异常。所有对象都是Object的实例,所以任何对象instanceof

Object都返回true。虽然我们说对象都是通过构造函数进行初始化的,但是instanceof却不是通过检查对象是否由该函数构造的,而是通过是否由构造函数的prototype继承来的,下面这个例子可以说明这个问题:

复制代码 代码如下:

function Range(low, high) {
this.low = low;
this.high = high;
}
Range.prototype.constructor == Range; //true
Range.prototype = {
include: function(x){ return (x >= this.low && x <= this.high); },
exclude: function(x){ return (x < this.low && x > this.high); }
}
var r = new Range(0, 100);
r instanceof Range; //false
r instanceof Object; //true
Range.prototype.constructor == Objecct; //true

这里虽然r是通过new

Range构造的,但是r却并不是Range的实例,这就是问题所在,Range.prototype赋值语句覆盖了默认的构造函数,没对prototype赋值之前Range.prototype.constructor为Range,赋值之后变成了Object,这也好理解,因为

复制代码 代码如下:

Range.prototype = {
include: function(x){ return (x >= this.low && x <= this.high); },
exclude: function(x){ return (x < this.low && x > this.high); }
}

其实等价于:

复制代码 代码如下:

Range.prototype = new Object({
include: function(x){ return (x >= this.low && x <= this.high); },
exclude: function(x){ return (x < this.low && x > this.high); }
});

所以Range.prototype.constructor == Object,那么通过new Range创建出来的实例当然就是Object的一个实例了。
看官方解释更直接些:
The
instanceof operator does not actually check whether r was initialized
by the Range constructor. It checks whether it inherits from
Range.prototype.
javascript中还有一个函数typeof具有与instanceof类似的功能,但是它返回的是具体的基本数据类型:number,string,function,object,undefined,boolean,只有这六种,不在这六种范围内的都返回object,也就是说typeof([])返回的是object,而不是array。

另一个涉及到的语法是constructor,constructor返回对象的构造函数:

复制代码 代码如下:

var a = [];
a.constructor; //Array

构造函数是一个对象的初始化函数,采用new调用,如果对象是一个Array,那么其constructor应该就是Array,自己写的类就不一定了,因为可能会吧prototype中的constructor更改掉。

2,伪数组的判断方法

javascript中有一种伪数组,它可以使用类似于Array的遍历方法进行遍历,有length属性获取元素的长度,可以使用[]下标来获取指定的元素,这种对象我们称之为伪数组,JQuery中的对象就是典型的伪数组,如下图:
 
所以判断是否是伪数组的关键就是判断是否有length属性,是否存在基本的数组操作函数splice,下面就是判断方法:

复制代码 代码如下:

var is_array = function(value) {
return value &&
typeof value === ‘object‘ &&
typeof value.length === ‘number‘ &&
typeof value.splice === ‘function‘ &&
!(value.propertyIsEnumerable(‘length‘));
};

这里propertyIsEnumerable就是用来判断length属性是否可列举,其实原生的String对象也是有类似Array的效果,但是我们不能把它当作Array对象,所以这里需要判断typeof
value == "object",因为typeof一个String对象,返回的是string。

来自:http://www.jb51.net/article/50056.htm

时间: 2024-12-10 09:44:23

js判断一个对象是否为数组的相关文章

如何用js判断一个对象是不是Array

.如何用js判断一个对象是不是Array 1.Array.isArray(obj) 调用数组的isArray方法 2.obj instanceof Array 判断对象是否是Array的实例 3.Object.prototype.toString.call(obj) ==='[object Array]' Object.prototype.toString方法会取得对象的一个内部属性[[Class]],然后依据这个属性,返回一个类似于[object Array]的字符串作为结果,call用来改变

js判断一个对象是否为空对象

最近遇到一个问题,用vue循环一个数组,展示一些海报图片.数组为空的话是不会遍历的,为了不让能够出现默认图片,这也就需要在数组中增加一个默认空对象arr[{}].问题来了,提交的时候怎么判断这个对象是空的呢? 简单粗暴的判断 因为是展示海报图片,每个对象下都有url属性,所以最直接的判断当前object的url属性 if (arr[0].url) { ... } 这个方法是无法判断arr为空的情况,如果arr[0]是个null,那么浏览器回抛出Cannot read property 'url'

Javascript判断一个对象是否为数组

从ECMAScript 5.1开始,我们可以使用Array.isArray() 方法来准确判断一个对象是否为数组. 目前主流浏览器均支持该方法(当然不包括IE8). var a = []; Array.isArray(a); // true  var b = ''; Array.isArray(b); // false 在过去,使用如下方式,也可以准确地判断数组,该方法精确有效且兼容性良好: var isArray = function (obj) {     return Object.pro

js判断一个对象是否为空

判断一个对象是否为空的三种方法 1.通过JSON自带的.stringify方法来判断 2.最常见的思路,for...in...遍历属性,为真则为"非空数组":否则为"空数组" 3.ES6新增的方法Object.keys() 原文地址:https://www.cnblogs.com/zhtian/p/9347841.html

如何判断一个对象是否是数组。

我们知道在js中除了function以外的所有对象如果用typeof来判断的话,它们都显示Object,但是有时候我们并不想这样,比如我判断一个数组就应该是个数组而不是打印Object. var arr = []; console.log(typeof arr); //object 解决方法1: var arr = []; console.log(arr.constructor.name==="Array"); //true 解决方法2: var arr = []; console.l

判断一个对象是否是数组

在js中用typeof运算符判断数组的类型时,报告是"object",这样看来没有任何意义. 下面用一个很好的方式来区分数组和对象: var is_array = function(value){ return Object.prototype.toString.apply(value) === '[object Array]'; }

JS判断元素是否在数组内

一.jQuery 如果是用JQuery的话,可以用inArray()函数: jquery inarray()函数详解jquery.inarray(value,array)确定第一个参数在数组中的位置(如果没有找到则返回 -1 ). determine the index of the first parameter in the array (-1 if not found).返回值jquery参数value (any) : 用于在数组中查找是否存在array (array) : 待处理数组.

js判断对象是否为数组

1.ECMAScript5中有一个现成的方法:Array.isArray(). var obj = {1:[1],2:[2]}, arr = [1], str = "1"; Array.isArray(obj) // return false Array.isArray(arr) // return true Array.isArray(str) // return false 2.instanceofinstanceof操作符用于判断对象是不是类的实例.使用方法是object ins

原生js 判断变量是一个数组

const arr = [] // 1. 最简单 ES5+ Array.isArray(arr) // 2. 兼容性好的方法,也很准确 Object.prototype.toString.call(arr) === '[object Array]' // 3. 这个也不错 arr.constructor.name === 'Array' // 4. instance 不好用 console.log(a instanceof Array) // true console.log(a instanc