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 相关文章推荐
模仿JQuery.extend函数扩展自己对象的js代码
Dec 09 Javascript
offsetParent 算法分析
Apr 05 Javascript
图解Sublime Text3使用技巧
Dec 21 Javascript
微信小程序 地图(map)实例详解
Nov 16 Javascript
微信小程序 详解页面跳转与返回并回传数据
Feb 13 Javascript
关于预加载InstantClick的问题解决方法
Sep 12 Javascript
Vue-router 类似Vuex实现组件化开发的示例
Sep 15 Javascript
javascript中一些奇葩的日期换算方法总结
Nov 14 Javascript
简单了解TypeScript中如何继承 Error 类
Jun 21 Javascript
VueCli3.0中集成MockApi的方法示例
Jul 05 Javascript
vue与iframe之间的信息交互的实现
Apr 08 Javascript
记录一次websocket封装的过程
Nov 23 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实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
2017/08/25 PHP
this[] 指的是什么内容 讨论
2007/03/24 Javascript
js 调用父窗口的具体实现代码
2013/07/15 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
js实现日历可获得指定日期周数及星期几示例分享(js获取星期几)
2014/03/14 Javascript
java必学必会之static关键字
2015/12/03 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
Javascript获取background属性中url的值
2016/10/17 Javascript
详解Angular的双向数据绑定(MV-VM)
2016/12/26 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
webpack是如何实现模块化加载的方法
2019/11/06 Javascript
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
Python中正则表达式的用法实例汇总
2014/08/18 Python
Python深入学习之闭包
2014/08/31 Python
Python 性能优化技巧总结
2016/11/01 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
python实现抠图给证件照换背景源码
2019/08/20 Python
Python常用库大全及简要说明
2020/01/17 Python
python操作ini类型配置文件的实例教程
2020/10/30 Python
美国林业供应商:Forestry Suppliers
2019/05/01 全球购物
西班牙宠物用品和食品网上商店:Tiendanimal
2019/06/06 全球购物
Perfume’s Club中文官网:西班牙美妆在线零售品牌
2020/08/24 全球购物
日本语毕业生自荐信
2014/02/01 职场文书
股权收购意向书
2014/04/01 职场文书
学校个人对照检查材料
2014/08/26 职场文书
法院授权委托书格式
2014/09/28 职场文书
免职通知
2015/04/23 职场文书
格列佛游记读书笔记
2015/06/30 职场文书
文艺有韵味的诗句(生命类、亲情类...)
2019/07/11 职场文书
Java实现二维数组和稀疏数组之间的转换
2021/06/27 Java/Android
Redis集群节点通信过程/原理流程分析
2022/03/18 Redis