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

在开发中,我们经常需要判断某个对象是否为数组类型,在Js中检测对象类型的常见方法都有哪些呢?

typeof
操作符

对于Function,
String, Number ,Undefined 等几种类型的对象来说,他完全可以胜任,但是为Array时






1 var arr=new Array("1","2","3","4","5");






2 alert(typeof(arr));

你会收到一个object
的答案,有点让人失望。

instanceof
操作符

JavaScript中instanceof运算符会返回一个
Boolean 值,指出对象是否是特定类的一个实例。 使用方法:result = object instanceof
class,还是刚刚的数组,再来一次,嗯,成功的返回 true。






1 var arrayStr=new Array("1","2","3","4","5");






2 alert(arrayStr instanceof Array);

小总结:看样子我们今天讨论的问题已经得到了解答,但事实上在多个frame中穿梭就会产生大问题了。






1 var iframe = document.createElement(‘iframe‘);   






2 document.body.appendChild(iframe);   






3 xArray = window.frames[window.frames.length-1].Array;      






4 var arr = new xArray("1","2","3","4","5");//这个写法IE大哥下是不支持的,FF下才有






5         






6 alert(arr instanceof Array); // false






7 alert(arr.constructor === Array); // false

返回结果为两个False,让人大失所望。

ECMA-262
写道

Object.prototype.toString(
) When the toString method is called, the following steps are taken:

  1. Get the [[Class]]
    property of this object.

  2. Compute a string value
    by concatenating the three strings “[object “, Result (1), and “]”.

  3. Return Result (2)

上面的规范定义了Object.prototype.toString的行为:首先,取得对象的一个内部属性[[Class]],然后依据这个属性,返回一个类似于"[object
Array]"的字符串作为结果(看过ECMA标准的应该都知道,[[]]用来表示语言内部用到的、外部不可直接访问的属性,称为“内部属性”)。利用这个方法,再配合call,我们可以取得任何对象的内部属性[[Class]],然后把类型检测转化为字符串比较,以达到我们的目的。还是先来看看在ECMA标准中Array的描述吧。

ECMA-262
写道

new
Array([ item0[, item1 [,…]]])

The
[[Class]] property of the newly constructed object is set to “Array”.

于是利用这点,第三种方法登场了。






1 function isArray(obj) {  





2   return Object.prototype.toString.call(obj) === ‘[object Array]‘;   






3 }

call改变toString的this引用为待检测的对象,返回此对象的字符串表示,然后对比此字符串是否是‘[object
Array]‘,以判断其是否是Array的实例。也许你要问了,为什么不直接o.toString()?嗯,虽然Array继承自Object,也会有toString方法,但是这个方法有可能会被改写而达不到我们的要求,而Object.prototype则是老虎的屁股,很少有人敢去碰它的,所以能一定程度保证其“纯洁性”:)

与前面几个方案不同,这个方法很好的解决了跨frame对象构建的问题,经过测试,各大浏览器兼容性也很好,可以放心使用。一个好消息是,很多框架,比如jQuery、Base2等等,都计划借鉴此方法以实现某些特殊的,比如数组、正则表达式等对象的类型判定,不用我们自己写了。

另外Ext3
也已经换成这样的写法了

view
source

print?






1 isArray : function(v){






2             return toString.apply(v) === ‘[object Array]‘;






3         }

js如何判断一个对象是不是Array?,布布扣,bubuko.com

时间: 2024-12-16 15:19:26

js如何判断一个对象是不是Array?的相关文章

如何用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/jquery判断一个对象是否为空

一.js判断一个对象是否为空对象 1)通过JSON自带的.stringify方法来判断 //JSON自带的stringify方法,将json转成json字符串 var c = {}; if(JSON.stringify(c) == "{}"){ console.log("是空对象"); } 2)for...in...遍历属性 //for in var a = {}; var b = {foo:'bar'}; function aa(a){ for(var attr

js如何判断一个对象{}是否为空对象,没有任何属性

前段时间用js写了一个类似"angularjs"用于数据绑定的东西,功能是比较简单了, 通常应该传进来的是一个ArrayList JSON对象数组, 但有时候通过AJAX方法调用返回的是一个JSON对象,而不是数组! 为了兼容这种情况使用了以下代码: if (typeof model.rows === "object" && !(model.rows instanceof Array)){ model.rows = [model.rows]; } 这

【js】--------------判断一个对象是否有某个属性-------------【劉】

js检测对象中是否存在某个属性 使用in关键字 var obj = {x:1} "x" in obj //true 自身属性 "j" in obj //false 自身没有原型也没有 "toString" in obj //true 原型上的属性 如果是原型链上的属性,判断也为true 使用hasOwnProperty var obj = {x:1} obj.hasOwnProerty("x") //true 自身属性 obj

JS怎么判断一个对象是否为空

昨天面试的时候被问到的问题.只怪自己根基不牢,没有回答好 甚至说出了“判断这个obj是否和{}相等”这样鱼蠢的答案(/(ㄒoㄒ)/~~)引用类型怎么可以直接判断==或者===呢?! 今天中秋佳节,宝宝白天没有学习,上午投简历,然后吃饭睡觉玩游戏.晚上觉醒了,开始研究昨天面试栽的坑! 想了一下这个问题,其实当时就觉得用for in可以解决,但是不确定所以没有说,不开森(*@ο@*) 百度了一下,发现各大博客互相抄袭转载,而且要么有错误,要么太复杂.懒得看了,还是决定自己用for in封装出一个判空

JS中判断一个对象是否为null、undefined、0

1.判断undefined: var tmp = undefined; if (typeof(tmp) == "undefined"){ alert("undefined"); } 说明:typeof 返回的是字符串,有六种可能:"number"."string"."boolean"."object"."function"."undefined"

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

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

js判断一个对象是否为空

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

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

前面<变量的赋值和对象的赋值>中有用到typeof运算符去判断运算数的类型,结果如下: alert(typeof 1); // 返回字符串"number" alert(typeof "1"); // 返回字符串"string" alert(typeof true); // 返回字符串"boolean" alert(typeof {}); // 返回字符串"object" alert(typeof