JavaScript中的数组类型判断

众所周知,我们在ES5中可以使用Array.isArray()函数来判断传入值是否为数组类型

在ES5之前,我们拥有typeof操作符,但它对数组只能返回"Object"(并且对于所有非函数的对象都是如此)

而instanceof操作符只能用于简单的情形,如:

[] instanceof Array // true

({}) instanceof Array // false

使用instanceof的问题:

在Web浏览器中有可能有多个窗口或者窗体(frame)存在,每个frame都有自己的JavaScript环境,有自己的全局对象,并且每个全局对象有自己的一组构造函数,因此一个frame中的对象将不可能是另外窗体中的构造函数的实例。窗体之间的混淆不常发生,但这个问题足以证明instanceof操作符不能视为一个可靠的数组检测方法。

解决方案:

检查对象的类属性——对数组而言,该属性的值总是“Array”

我们使用Object.prototype.toString()方法,在ES3中,可以将isArray()函数的代码这样写:

var isArray = Function.isArray || function(o) {

    return typeof 0 === "object" &&

    Object.prototype.toString.call(o) === "[object Array]"

}

实际上,此处类属性的检测就是ES5中Array.isArray()函数所做的事情。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容