JS检测数组类型的方法小结


Posted in Javascript onMarch 14, 2017

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]”
}

以上所述是小编给大家介绍的JS检测数组类型的方法小结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript学习笔记(六) Date 日期类型
Jun 19 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
Jun 26 Javascript
jQuery异步获取json数据方法汇总
Dec 22 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
Mar 26 Javascript
学习JavaScript设计模式之装饰者模式
Jan 19 Javascript
AngularJS路由实现页面跳转实例
Mar 03 Javascript
vue脚手架中配置Sass的方法
Jan 04 Javascript
Vue插件打包与发布的方法示例
Aug 20 Javascript
vue实现微信获取用户信息的方法
Mar 21 Javascript
layui禁用侧边导航栏点击事件的解决方法
Sep 25 Javascript
微信小程序indexOf的替换方法(推荐)
Jan 14 Javascript
vue 使用lodash实现对象数组深拷贝操作
Sep 10 Javascript
轻松理解JavaScript闭包
Mar 14 #Javascript
微信小程序 页面跳转及数据传递详解
Mar 14 #Javascript
JavaScript ES6中export、import与export default的用法和区别
Mar 14 #Javascript
微信小程序 动态绑定数据及动态事件处理
Mar 14 #Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
Mar 14 #Javascript
vuejs响应用户事件(如点击事件)
Mar 14 #Javascript
微信小程序 在线支付功能的实现
Mar 14 #Javascript
You might like
用PHP编写PDF文档生成器
2006/10/09 PHP
discuz 首页四格:最新话题+最新回复+热门话题+精华文章插件
2007/08/19 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
Thinkphp5+uploadify实现的文件上传功能示例
2018/05/26 PHP
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
csdn 论坛技术区平均给分功能
2009/11/07 Javascript
入门基础学习 ExtJS笔记(一)
2010/11/11 Javascript
关于用Jquery的height()、width()计算动态插入的IMG标签的宽高的问题
2010/12/08 Javascript
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
jQuery隔行变色与普通JS写法的对比
2013/04/21 Javascript
JavaScript实现网页截图功能
2014/10/16 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
js实现背景图片感应鼠标变化的方法
2015/02/28 Javascript
Javascript中this关键字的一些小知识
2015/03/15 Javascript
js实现仿Windows风格选项卡和按钮效果实例
2015/05/13 Javascript
js实现HashTable(哈希表)的实例分析
2016/11/21 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
js最全的数组的降维5种办法(小结)
2020/04/28 Javascript
Python自动化构建工具scons使用入门笔记
2015/03/10 Python
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
程序员写Python时的5个坏习惯,你有几条?
2018/11/26 Python
Python利用heapq实现一个优先级队列的方法
2019/02/03 Python
python按照多个条件排序的方法
2019/02/08 Python
python3检查字典传入函数键是否齐全的实例
2020/06/05 Python
CSS3之背景尺寸Background-size使用介绍
2013/10/14 HTML / CSS
艺术用品:Arteza
2018/11/25 全球购物
党员学习十八大感想
2014/01/17 职场文书
关于颐和园的导游词
2015/01/30 职场文书
大学生活感想
2015/08/10 职场文书
实习员工转正的评语汇总,以备不时之需
2019/12/17 职场文书
优化Mysql查询的示例
2022/04/26 MySQL