加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营 > 正文

怎样判定一个Object是一个Array

发布时间:2018-10-01 21:22:51 所属栏目:运营 来源:站长网
导读:在开拓中,我们常常必要判定某个工具是否为数组范例,在Js中检测工具范例的常见要领都有哪些呢? 1.typeof 操纵符.对付Function, String, Number ,Undefined 等几种范例的工具来说,他完全可以胜任,可是为Array时 Copy to Clipboard 引用的内容:[www.

在开拓中,我们常常必要判定某个工具是否为数组范例,在Js中检测工具范例的常见要领都有哪些呢?

1.typeof 操纵符.对付Function, String, Number ,Undefined 等几种范例的工具来说,他完全可以胜任,可是为Array时

Copy to ClipboardLiehuo.Net Codes引用的内容:[www.veryhuo.com] var arr=new Array("1","2","3","4","5");
alert(typeof(arr));

你会收到一个object 的谜底,有点让人扫兴 .

2.instanceof 操纵符,JavaScript中instanceof运算符会返回一个 Boolean 值,指出工具是否是特定类的一个实例。

行使要领:result = object instanceof class,照旧方才的数组,再来一次,嗯,乐成的返回 true.

Copy to ClipboardLiehuo.Net Codes引用的内容:[www.veryhuo.com] var arrayStr=new Array("1","2","3","4","5");
alert(arrayStr instanceof Array);

小总结:看样子我们本日接头的题目已经获得相识答,但究竟上在多个frame中穿梭就会发生大题目了.

代码:

Copy to ClipboardLiehuo.Net Codes引用的内容:[www.veryhuo.com] 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”.

于是操作这点,第三种要领登场了。

Copy to ClipboardLiehuo.Net Codes引用的内容:[www.veryhuo.com] 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 也已经换成这样的写法了

Copy to ClipboardLiehuo.Net Codes引用的内容:[www.veryhuo.com] isArray : function(v){
return toString.apply(v) === '[object Array]';
}

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读