这次给大家带来web开发中怎样检测数组,web开发中检测数组的注意事项有哪些,下面就是实战案例,一起来看一下。
JS中最古老的跨域问题之一就是在帧(frame)之间来回传递数组。开发者很快发现instanceof Array在此场景中不总是返回正确的结果。正如上文提到的,每个帧(frame)都有各自的Array构造函数,因此一个帧(frame)中的实例在另外一个帧里不会被识别。Douglas Crockford首先推荐使用“鸭式辨型”接口(duck typing)“鸭式辨型”是由作家James Whitcomb Riley首先提出的概念,即“像鸭子一样走路、游泳并且嘎嘎叫的鸟就是鸭子”,本质上是关注“对象能做什么”,而不要关注“对象是什么”。
// 采用鸭式辨型的方法检测数组function isArray(value) { return typeof value.sort === "function";}
登录后复制
这种检测方法依赖一个事实,即数组是唯一包含sort()方法的对象。当然,如果传入isArray()的参数是一个包含sort()方法的对象,它也会返回true。
关于如何在JS中检测数组类型已经有很多研究了,最终,Juriy Zaytsev(也被称作Kangax)给出了一种优雅的解决方案。
function isArray(value) { return Object.prototype.toString.call(value) === "[object Array]";}
登录后复制
Kangax发现调用某个值的内置toString()方法在所有浏览器中都会返回标准的字符串结果。对于数组来说,返回的字符串为”[object Array]”,也不用考虑数组实例是在哪个帧(frame)中被构造出来的。Kangax给出的解决方案很快流行起来,并被大多数JS类库所采纳。
这种方法在识别内置对象时往往十分有用,但对于自定义对象请不要用这种方法。比如,内置JSON对象使用这种方法将返回”[object JSON]”。
从那时起, ECMAScript5将Array.isArray()正式引入JS。唯一的目的就是准确地检测一个值是否为数组。同Kangax的函数一样, Array.isArray()也可以检测跨帧(frame)传递的值,因此很多JS类库目前都类似地实现了这个方法。
相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!
推荐阅读:
web开发中事件处理规则有哪些
为什么web开发中需要避免使用全局变量
以上就是web开发中怎样检测数组的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2750185.html