怎么判断一个对象是不是数组类型?

前面《变量的赋值和对象的赋值》中有用到typeof运算符去判断运算数的类型,结果如下: 

alert(typeof 1);                // 返回字符串"number"
alert(typeof "1");              // 返回字符串"string"
alert(typeof true);             // 返回字符串"boolean"
alert(typeof {});               // 返回字符串"object"
alert(typeof []);               // 返回字符串"object "
alert(typeof function(){});     // 返回字符串"function"
alert(typeof null);             // 返回字符串"object"
alert(typeof undefined);        // 返回字符串"undefined"  

其中,typeof {}和typeof []的结果都是object,那么问题来了,我怎么通过typeof去判断一个对象是不是数组类型呢?

对象是对象,数组也是对象,js中万物皆对象,很显然,通过简单的typeof运算符是不能够达到目的,我们得换个方法。

---------------------------------------------------------------------------------------------------------------------------

可以尝试以下几种方法:

1、从原型入手,Array.prototype.isPrototypeOf(obj);

利用isPrototypeOf()方法,判定Array是不是在obj的原型链中,如果是,则返回true,否则false。

2、也可以从构造函数入手,obj instanceof Array

先说说 typeof 和 instanceof 的区别?

两者都可以用来判断变量,typeof会返回基本类型,如文章开头,我们很简单可以用

typeof a != ‘undefined‘ 判断a变量存在。而instanceof只会返回一个布尔值,那么我们试试,结果如下:

上面的方法其实也可以用对象constructor属性,因为在js中每个对象都有constructor属性,这种也常用作判断未知对象的类型。

例如:typeof arr == "object" && arr.constructor == Array; //先判断是对象再进一步判断。

那样是不是这个方法就ok了?别开心那么早,坑总是会有的。

在一些跨框架的页面中的数组,使用该方法可能不会那么顺利,原因是在不同的框架中创建的数组不会相互共享其prototype属性。

问题总是要解决的,有没有更加精确的方法呢?==果真有啊!

3、根据对象的class属性,跨原型链调用toString()方法。

解释一下,在js中一个对象一旦被创建,在内部会携带创建对象的类型名,可以叫乳名,一旦创建就不能被修改了。那么怎么去会的这个乳名呢?

js中提供了,调用对象原型中的toString方法, Object.prototype.toString.call(obj);

那么有了这个方法,获取对象名可以这样获取:

4、Array.isArray()方法。

其实js已经提供了判断是不是数组类型的方法,如下:

Array.isArray([1, 2, 3]);  // true
Array.isArray({foo: 123}); // false
Array.isArray(‘foobar‘);   // false
Array.isArray(undefined);  // false  

在MDN中就比较了isArray和instanceof的区别,当Array.isArray()不可用的使用,MDN做了如下的补丁,说明还是比较推荐使用前面讲的第三种方法 Object.prototype.toString.call(obj)。

以上四种方法够用了吧?

-----------------------------------------------------end---------------------------------------------------------------------------

  

时间: 2024-08-01 10:46:38

怎么判断一个对象是不是数组类型?的相关文章

判断数据类型和数组类型

js数据类型判断和数组判断 这么基础的东西实在不应该再记录了,不过嘛,温故知新~就先从数据类型开始吧 js六大数据类型:number.string.object.Boolean.null.undefined string: 由单引号或双引号来说明,如"string" number:什么整数啊浮点数啊都叫数字,你懂的~ Boolean: 就是true和false啦 undefined:未定义,就是你创建一个变量后却没给它赋值~ null: 故名思久,null就是没有,什么也不表示 obj

判断一个对象是不是数组的三种方法

1.使用instanceof操作符 2.Array.isArray()  (ES5新增的方法) 3.使用Object.prototype上的原生toString()方法判断. 使用方法: Object.prototype.toString.call(value) var a={}; var b=[]; var frame=document.createElement("iframe");//创建一个框架 document.body.appendChild(frame); var c=w

python 判断一个对象的变量类型

isinstance 语法: isinstance(object, classinfo) 如果参数object是classinfo的实例,或者object是classinfo类的子类的一个实例, 返回True.如果object不是一个给定类型的的对象, 则返回结果总是False. 例子: >>> isinstance(1, int) True >>> isinstance(1.0, float) True >>>isinstance(1,(int,fl

判断一个对象是不是数组

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px "Helvetica Neue" } var a = []; // 1.基于instanceof a instanceof Array; // 2.基于constructor a.constructor === Array; // 3.基于Object.prototype.isPrototypeOf Array.prototype.isPr

js数组类型判断与数据类型判断回顾

前两天参加了百度前端的电话面试,其中问到了数组类型的判断问题,虽然以前看过这方面的内容,但时间久了有点模糊,答得不怎么好,现在对相关内容做个回顾和总结. 先来回答这个问题:如何判断一个对象是数组? 判断一个对象是否是数组方法有多种: 一.Array.isArray()函数 在ECMAScript5中可以通过Array.isArray()来做这件事: Array.isArray({}); //false Array.isArray([]); //true 二.instanceof instance

typeof判断类型(数组类型得用instanceof)

var a= 1; console.log(typeof a); var b= '1'; console.log(typeof b); var c; console.log(typeof c); var d= true; console.log(typeof d); var e= [1,2,3]; console.log(typeof e); var f= function(){}; console.log(typeof f); console.log(e instanceof Array) 观

判断一个变量是数组类型的方法

在很多时候,我们都需要对一个变量进行数组类型的判断(借鉴) 学过js就应该知道typeof运算符返回字符串,该字符串代表操作数的类型(即返回数据类型)这是最常用的. 下面多种实现方式: JavaScript中检测对象的方法 1.typeof操作符 这种方法对于一些常用的类型来说那算是毫无压力,比如Function.String.Number.Undefined等,但是要是检测Array的对象就不起作用了. alert(typeof null); // "object" alert(ty

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

1,真正的数组的判断方法 javascript中最简单的声明数组方法为: var a = []; 判断是否为数组的最直接的方法为: 复制代码 代码如下: a instanceof Array //true a .constructor == Array //true 这里涉及到一个instanceof语法,instanceof是一个云算符,与"+-*/"一样,它的语法如下: result = obj intanceof class 是用来判断一个对象是否是某个class的一个实例,运算

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