判断某个对象是不是数组

总结《JavaScriptt高级程序设计》中介绍判断某个对象是否是数组的方法。

第一种方法:

使用instanceof操作符。instanceof操作符用来判断要检测对象的原型链上是否存在某个构造函数的prototype属性。

语法: A instanceof B,意思是对象A的原型是否是B.prototype。如果是,返回true,如果不是,返回false。

1 var a={};
2   var b=[];
3   console.log(a instanceof Object);//true
4   console.log(b instanceof Array);//true

使用instanceof操作符有一个问题就是,它假定只有一个全局作用域。如果一个网页中有多个框架(iframe元素),那实际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的Array构造函数。如果你从一个框架向另一个框架传入一个数组,那么传入的数组与在第二个框架中原生创建的数组分别具有各自不同的构造函数。传入的数组在该框架中用instanceof操作符判断就会返回false。代码如下:

 1   var a={};
 2   var b=[];
 3   console.log(a instanceof Object);//true
 4   console.log(b instanceof Array);//true
 5
 6   var frame=document.createElement("iframe");//创建一个框架
 7   document.body.appendChild(frame);
 8   var c=window.frames[0].Array;//取得框架全局执行环境中的Array构造函数
 9   var d=new c();//在框架全局执行环境中创建一个数组d
10   console.log(d instanceof Array);//在当前页面的执行环境中用instanceof操作符判断d是否为数组,返回false
11   console.log(Array.isArray(d));//true

第二种方法:

使用ECMAScript 5新增的Array.isArray()方法。这个方法的作用就是确定某个值到底是不是数组,而不管它到底是在哪个全局执行环境中创建的。

第三种方法:

使用使用Object.prototype上的原生toString()方法判断。

使用方法如下:

Object.prototype.toString.call(value)

该方法返回一个[object NativeConstructorName]格式的字符串。每个类在内部都有一个[[Class]]属性,这个属性中就指定了上述字符串中的构造函数名。

该方法不能检测非原生构造函数的函数名,因此开发人员定义的任何构造函数都将返回[object Object]。

 1   var a={};
 2   var b=[];
 3   var frame=document.createElement("iframe");//创建一个框架
 4   document.body.appendChild(frame);
 5   var c=window.frames[0].Array;//取得框架全局执行环境中的Array构造函数
 6   var d=new c();//在框架全局执行环境中创建一个数组d
 7   console.log(Object.prototype.toString.call(a));//[object Object]
 8   console.log(Object.prototype.toString.call(b));//[object Array]
 9   console.log(Object.prototype.toString.call(d));//[object Array]
10
11   function Person() {
12      this.name=name;
13   }
14   var n=new Person();
15   console.log(Object.prototype.toString.call(n));//[object Object]

参考:

1、js如何判断一个对象是不是Array? http://www.nowamagic.net/librarys/veda/detail/1250

2、JavaScript中toStirng()与Object.prototype.toString.call()方法浅谈 http://www.zhufengpeixun.cn/JavaScriptmianshiti/2014-02-28/271.html

3、JavaScript:Object.prototype.toString方法的原理 http://www.cnblogs.com/ziyunfei/archive/2012/11/05/2754156.html

时间: 2024-10-09 06:26:30

判断某个对象是不是数组的相关文章

判断是对象还是数组的方法

一些数组的基础知识,感觉很有意思 通过typeof是无法判断是对象还是数组的 第一:使用instanceof进行判断,A instanceof B即对象A是不是构造函数B构造出来的,是即返回true, 不是即返回false. 第二:在typeof上进行enhancement, typeof数组和对象返回都是object, 但是数组的长度为0及0以上的整数,object的长度为undefined. 方法三:利用Object.prototype.toString.call()方法将该变量转化为代表其

利用循环遍历的方式判断某个对象是否属于这个数组

<!doctype html><html > <head> <title>利用循环遍历的方式判断某个对象是否属于这个数组</title> <meta charset="UTF-8"> </head> <body> <!-- 利用循环遍历的方式判断某个对象是否属于这个数组; 不属于这个数组时,把这个对象填充到数组里面去: --> </body></html>

JS判断对象是不是数组“Array”

在开发中,我们经常需要判断某个对象是否为数组类型,在Js中检测对象类型的常见方法都有哪些呢? typeof 操作符 对于Function, String, Number ,Undefined 等几种类型的对象来说,他完全可以胜任,但是为Array时 var arr=new Array("1","2","3","4","5"); alert(typeof(arr)); 你会收到一个object 的答案,有点让

JavaScript判断一个变量是对象还是数组

typeof都返回object 在JavaScript中所有数据类型严格意义上都是对象,但实际使用中我们还是有类型之分,如果要判断一个变量是数组还是对象使用typeof搞不定,因为它全都返回object 1 2 3 4 5 6 var o = { 'name':'lee' }; var a = ['reg','blue']; document.write( ' o typeof is ' + typeof o); document.write( ' <br />'); document.wri

JavaScript判断对象和数组

在调用后端接口时,由于后端接口的不规范统一,接口最外层在没有数据时返回的是空数组(其实更想要的是空json对象),而在有数据时返回的是json对象,所以在接收到后端返回的接口时就需要首先判断返回的数据是对象还是数组,这里提供一些方法 方法一: //判断是否为数组 function isArray(obj) { return obj instanceof Array; } //判断是否为对象 function isObject(obj) { return obj instanceof Object

NX二次开发-算法篇-判断找到两个数组里不相同的对象

1 NX9+VS2012 2 3 #include <uf.h> 4 #include <uf_curve.h> 5 #include <uf_modl.h> 6 #include <vector> 7 #include <uf_disp.h> 8 9 10 UF_initialize(); 11 12 //第一步,创建5条直线 13 UF_CURVE_line_t Coords1; 14 Coords1.start_point[0] = 0.0

第一百零三节,JavaScript对象和数组

JavaScript对象和数组 学习要点: 1.Object类型 2.Array类型 3.对象中的方法 什么是对象,其实就是一种类型,即引用类型.而对象的值就是引用类型的实例.在ECMAScript中引用类型是一种数据结构,用于将数据和功能组织在一起.它也常被称做为类,但ECMAScript中却没有这种东西.虽然ECMAScript是一门面向对象的语言,却不具备传统面向对象语言所支持的类和接口等基本结构. 一.Object对象类型 Object类型对象, 到目前为止,我们使用的引用类型最多的可能

轻松学习JavaScript九:JavaScript对象和数组

许多高级编程语言都是面向对象的,比如C++.C#和Java等高级程序设计语言,那么一种面向对象语言有哪些基 本要求呢?下面我们就通宿地说一下面向对象的一些知识. 一种面向对象语言需要向开发者提供四种基本能力: (1)封装:把相关的信息(无论数据或方法)存储在对象中的能力 (2)聚集:把一个对象存储在另一个对象内的能力 (3)继承:由另一个类(或多个类)得来类的属性和方法的能力 (4)多态:编写能以多种方法运行的函数或方法的能力 由于ECMAScript支持这些要求,因此可被是看做面向对象的.在E

JavaScript 判断一个变量是不是数组

如何判断一个变量是不是数组是一个很基础的问题. 1. 可以简单的使用instanceof来判断 [] instanceof Array 这种用法的缺陷是在iframe里面定义的Array 实例不能适用.例如在子iframe里面定义的变量 a = []; 如果判断: document.getElementsByTagName('iframe')[0].contentWindow.a instanceof Array 会返回false, 另外的以下的结果为true.可见iframe里面的window