首页 >web前端 >js教程 >web开发中怎样检测数组

web开发中怎样检测数组

php中世界最好的语言
php中世界最好的语言原创
2018-06-04 10:20:271355浏览

这次给大家带来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类库目前都类似地实现了这个方法。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

web开发中事件处理规则有哪些

为什么web开发中需要避免使用全局变量

以上是web开发中怎样检测数组的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn