JavaScript 判断判断某个对象是Object还是一个Array


Posted in Javascript onJanuary 28, 2010

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

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

你会收到一个object 的答案,有点让人失望 .
2.instanceof 操作符,JavaScript中instanceof运算符会返回一个 Boolean 值,指出对象是否是特定类的一个实例。
使用方法:result = object instanceof class,还是刚刚的数组,再来一次,嗯,成功的返回 true.

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

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

代码

var iframe = document.createElement('iframe'); 
document.body.appendChild(iframe); 
xArray = window.frames[window.frames.length-1].Array; 
var arr = new xArray("1","2","3","4","5");//这个写法IE大哥下是不支持的,FF下才有 
alert(arr instanceof Array); // false 
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”.
于是利用这点,第三种方法登场了。
function isArray(obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
} call改变toString的this引用为待检测的对象,返回此对象的字符串表示,然后对比此字符串是否是'[object Array]',以判断其是否是Array的实例。也许你要问了,为什么不直接o.toString()?嗯,虽然Array继承自Object,也会有toString方法,但是这个方法有可能会被改写而达不到我们的要求,而Object.prototype则是老虎的屁股,很少有人敢去碰它的,所以能一定程度保证其“纯洁性”:)
与前面几个方案不同,这个方法很好的解决了跨frame对象构建的问题,经过测试,各大浏览器兼容性也很好,可以放心使用。一个好消息是,很多框架,比如jQuery、Base2等等,都计划借鉴此方法以实现某些特殊的,比如数组、正则表达式等对象的类型判定,不用我们自己写了。

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

isArray : function(v){ 
return toString.apply(v) === '[object Array]'; 
}
Javascript 相关文章推荐
让你的博客飘雪花超出屏幕依然看得见
Jan 04 Javascript
js 为label标签和div标签赋值的方法
Aug 08 Javascript
获取input标签的所有属性的方法
Jun 28 Javascript
轮播图组件js代码
Aug 08 Javascript
JavaScript实现事件的中断传播和行为阻止方法示例
Jan 20 Javascript
原生javascript实现读写CSS样式的方法详解
Feb 20 Javascript
vue使用watch 观察路由变化,重新获取内容
Mar 08 Javascript
JavaScript原生数组Array常用方法
Apr 06 Javascript
layui实现tab的添加拒绝重复的方法
Sep 04 Javascript
vue页面切换项目实现转场动画的方法
Nov 12 Javascript
Vue+ElementUI 中级联选择器Bug问题的解决
Jul 31 Javascript
vue中路由跳转不计入history的操作
Sep 21 Javascript
图像替换新技术 状态域方法
Jan 28 #Javascript
javascript innerText和innerHtml应用
Jan 28 #Javascript
使用JavaScript库还是自己写代码?
Jan 28 #Javascript
js或css实现滚动广告的几种方案
Jan 28 #Javascript
jquery中的sortable排序之后的保存状态的解决方法
Jan 28 #Javascript
javascript面向对象的方式实现的弹出层效果代码
Jan 28 #Javascript
jquery 常用操作方法
Jan 28 #Javascript
You might like
php准确获取文件MIME类型的方法
2015/06/17 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
2017/05/24 PHP
javascript flash下fromCharCode和charCodeAt方法使用说明
2008/01/12 Javascript
jquery 实现的全选和反选
2009/04/15 Javascript
JS继承--原型链继承和类式继承
2013/04/08 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
node.js中的console用法总结
2014/12/15 Javascript
javascript中的遍历for in 以及with的用法
2014/12/22 Javascript
js实现div在页面拖动效果
2016/05/04 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
2016/09/20 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
JavaScript在控件上添加倒计时功能的实现代码
2017/07/04 Javascript
Webpack中publicPath路径问题详解
2018/05/03 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
2018/07/28 Javascript
vue-router 前端路由之路由传值的方式详解
2019/04/30 Javascript
详解Vscode中使用Eslint终极配置大全
2019/11/08 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
[57:31]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第一场 2月1日
2021/03/11 DOTA
Python中的__new__与__init__魔术方法理解笔记
2014/11/08 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
2017/11/23 Python
Python自定义装饰器原理与用法实例分析
2018/07/16 Python
Python基于Hypothesis测试库生成测试数据
2020/04/29 Python
基于Python的自媒体小助手---登录页面的实现代码
2020/06/29 Python
Python字典dict常用方法函数实例
2020/11/09 Python
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
求职者应聘的自我评价
2013/10/16 职场文书
运动会领导邀请函
2014/01/10 职场文书
户外用品商店创业计划书
2014/01/29 职场文书
家长写给老师的建议书
2014/03/13 职场文书
2014年教师节寄语
2014/04/03 职场文书
计算机专业应届生求职信
2014/04/06 职场文书
房地产广告策划方案
2014/05/15 职场文书
我的中国梦演讲稿800字
2014/08/19 职场文书
企业财务总监岗位职责
2015/04/03 职场文书
刘胡兰观后感
2015/06/16 职场文书