这篇文章将为大家详细讲解有关怎么在JavaScript中检测数组的类型,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
1.instanceof
当只有一个全局执行环境时适用,如果包含多个框架,就存在两个以上不同版本的Array构造函数,如果从一个框架向另一个框架传递数组,传入的数组与在第二个框架中原生创建的数组分别具有不同的构造函数,即为不同类型
if (value instanceof Array) { //对数组执行某项操作 }
2. Array.isArray() 方法
因为是ES5新增的,只支持IE9+、Firefox 4+、Safari 5+、Opera 10.5+和Chrome
if (Array.isArray(value)) { //对数组执行某些操作 }
3.Object.prototype.toString.call()方法
适用于所有环境,只支持原生的对象,Object的toString()方法不能检测非原生构造函数的构造函数名。开发人员自定义的任何构造函数都将返回[object Object]
原理:在任何值上直接调用Object的原生toString()方法,都会返回[object NativeConstrctorName]格式的字符串,每个类内部都有一个class属性,这个属性中就指定了上述字符串中构造函数名。
var value = [] console.log(Object.prototype.toString.call(value))//"[Object Array]"
由于原生数组的构造函数名和作用域无关,因此使用toString()方法就能保证输出一样的值。
为什么不使用对象自己的toString() 方法?
var value = [] console.log(value.toString())//" " value = ['pp','oo'] console.log(value.toString())//"pp,oo" value = ['pp',"oo"] console.log(Object.prototype.toString.call(value))//[object Array]
Array的tostring()方法被重写了(很多原生对象均如此),所以它会调用自己构造函数上的toString()方法,返回其他的字符串
还可以用此方法来判断是不是原生函数或者正则表达式
function isFunction(value){ return Object.prototype.toString.call(value) === “[object Function]” }//不适用于IE中以COM对象实现的任何函数 function isRegExp(value){ return Object.prototype.toString.call(value) === “[object RegExp]” }
关于怎么在JavaScript中检测数组的类型就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。