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:
- Get the [[Class]] property of this object.
- Compute a string value by concatenating the three strings “[object “, Result (1), and “]”.
- 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 也已经换成这样的写法了
1
|
isArray : function (v){
|
2
|
return toString.apply(v) === '[object Array]' ;
|
3
|
}
|
js如何判断一个对象是不是Array?相关推荐
- js如何判断一个对象是不是Array
typeof 操作符 对于Function, String, Number ,Undefined 等几种类型的对象来说,他完全可以胜任,但是为Array时 var arr=new Array(&quo ...
- JS 中判断一个对象是否为数组对象?
在面向对象中 判断一个对象中 判断一个对象是否为数组 1 可以查找它的原型 (__proto__) 是否为数组对象的原型对象 var arr1 = [1,2,3];console.log(arr1._ ...
- JS如何判断一个对象是否为空、是否有某个属性
一.JS判断一个对象是否为空 方法一: let obj1 = {} let obj2 = {a:1} function empty(obj){for (let key in obj){return f ...
- [JS] 如何判断一个对象是否为空
js判断空对象的几种方法 一.将对象转为字符串比较 let a = {} console.log(JSON.stringify(a) === '{}') //true 二.for-in循环 funct ...
- js中判断一个对象是否存在
一.Boolean()方法 用Boolean()方法可以将Js中的任意数据类型转为布尔值: 二.用于判断xx是否存在 js一般会自动执行Boolean()方法,我们可以借此判断某个对象在js当前的执行 ...
- js判断一个对象是否是空对象
一.写在前面 js如何判断一个对象是否是空对象,本文给出三个方法. 二.采用for-in-进行遍历 最常见的思路就是使用for....in...遍历属性,为真则为非空对象,为假则为空对象. <s ...
- js判断一个对象是否为空
判断一个对象是否为空的三种方法 1.通过JSON自带的.stringify方法来判断 2.最常见的思路,for...in...遍历属性,为真则为"非空数组":否则为"空数 ...
- JS类型判断、对象克隆、数组克隆
类型判断 我们先说一下JS的数据类型,我们一般说JS有六大数据类型(ES6以前)分别是: 基本数据类型 Number String Boolean null undefined 引用数据类型 obje ...
- html js 添加数据类型,js数据类型判断和转换
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 前言 无论笔试还是面试,总会问到数据类型和隐式转换.今天彻底整理一下这块的知识,希望对大家有帮助. 看到下面的题,是不是 ...
最新文章
- 【iOS官方文档翻译】iOS的蓝牙连接、数据接收及发送
- windows下安装和配置Redis
- 消息称微软计划收购GitHub,估值超50亿美元
- 期末考试前的预习,科目:化工设备与反应器(5)
- Kubernetes:标签、选择器、注解、容忍度、亲和性
- 微软Silverlight,你应该知道的10件事
- 多字段回溯 mysql_回溯算法 | 追忆那些年曾难倒我们的八皇后问题
- docker搭建zookeeper集群
- Intra Chroma Prediction
- 小米全球第二,雷军签发内部嘉奖令;亚马逊被欧盟处以创纪录的8.88亿美元罚款;​PyCharm 2021.2 发布|极客日报...
- 一主多备几影响 oracle,1个主库配置多个备库的问题
- iOS 控制器View加载顺序详细版
- 技嘉ide模式怎么改,电脑BIOS中怎么设置硬盘为IDE模式
- 一个输入手机号获取验证码的页面,包含哪些测试流程?
- 控制JetsonNano风扇命令
- java ctr_java – CTR模式使用初始向量(IV)
- spring context:property-placeholder无法加载配置文件,导致属性无效
- 第四期_Metasploit 基础(六)Meterprete《Metasploit Unleashed Simplified Chinese version(Metasploit官方文档教程中文版)》
- dropout原理解析
- zabbix Discovery rules