JavaScript判断数组类型的方法


Posted in Javascript onOctober 23, 2019

前言

JavaScript中关于数组的判定问题,一直都是一个必须要掌握的点,那么,运用知识,如何判断一个类型是数组,就需要有对JavaScript使用有着深入的了解。

判断方法

一、Array.isArray

ES5新增的数组方法,Array.isArray应该是我们最先想到的判定方式,现在应用的也比较广泛。

const arr = [1,2,3,4]
Array.isArray(arr)  // true

如果是在支持ES5的浏览器中,用这样的方式自然没什么问题,但是如果是在IE9以下版本,这个方法并未受到支持,这时候我们就要用别的方式来判断数组。

二、instanceof

一般来说,instanceof关键字,是用来判断某个元素是否某对象构造函数实例。在数组判断上,instanceof关键字也可以进行数组的判定。

const arr = [1, 2, 3, 4]
arr instanceof Array  // true

instanceof支持的浏览器版本比较多,所以一般来说,用instanceof判断,会比Array.isArray判定的范围要广泛。

三、toString

对象的toString方式也可以判定数组类型,一般来说这种方式的判定是各大库的一种Array.isArray的代替实现。

例如,polyfill中,就是如此实现:

if (!Array.isArray) {
 Array.isArray = function(arg) {
  return Object.prototype.toString.call(arg) === '[object Array]';
 };
}

const arr = [1, 2, 3, 4]
Object.prototype.toString.call(arr) === '[Object Array]'  // true

四、constructor

除了以上的方式之外,我们还可以通过构造函数来判定:

const arr = [1, 2, 3, 4]
arr.constructor === Array // true
arr.__proto__.constructor === Array //true

弊端

instanceof和constructor的判定也存在一些弊端,他们判定的数组必须定义在同一个页面,否则将会判定为false。

如果在iframe中的数组判定,就会出错。

var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
xArray = window.frames[window.frames.length-1].Array;
var arr = new xArray(1,2,3); // [1,2,3]

// Correctly checking for Array
Array.isArray(arr); // true
// Considered harmful, because doesn't work through iframes
arr instanceof Array; // false
arr.constructor === Array; // false

总结

由上述几个方法判定,可以得出,其实polyfill的判定是最合理的,也最具有兼容性的一种判定。

利用toString判定,胜出。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 与或运算符 || && 妙用
Dec 09 Javascript
jQuery之日期选择器的深入解析
Jun 19 Javascript
深入理解JavaScript中的传值与传引用
Dec 09 Javascript
jquery解析XML字符串和XML文件的方法说明
Feb 21 Javascript
js实现点击图片改变页面背景图的方法
Feb 28 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
Mar 14 Javascript
谈谈impress.js初步理解
Sep 09 Javascript
理解javascript中的Function.prototype.bind的方法
Feb 03 Javascript
vue-rx的初步使用教程
Sep 21 Javascript
其实你可以少写点if else与switch(推荐)
Jan 10 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
Aug 27 Javascript
JS+css3实现幻灯片轮播图
Aug 14 Javascript
Vue 2.0双向绑定原理的实现方法
Oct 23 #Javascript
p5.js绘制旋转的正方形
Oct 23 #Javascript
p5.js实现简单货车运动动画
Oct 23 #Javascript
p5.js实现故宫橘猫赏秋图动画
Oct 23 #Javascript
vue父组件给子组件的组件传值provide inject的方法
Oct 23 #Javascript
p5.js临摹旋转爱心
Oct 23 #Javascript
JavaScript 作用域scope简单汇总
Oct 23 #Javascript
You might like
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
2011/04/07 PHP
php实现约瑟夫问题的方法小结
2015/03/23 PHP
JS将所有对象s的属性复制给对象r(原生js+jquery)
2014/01/25 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
Enter回车切换输入焦点实现思路与代码兼容各大浏览器
2014/09/01 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
关于javascript的一些知识以及循环详解
2016/09/12 Javascript
简单的js表格操作
2016/09/24 Javascript
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
js正则表达式验证表单【完整版】
2017/03/06 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
2017/04/26 Javascript
VUE Error: getaddrinfo ENOTFOUND localhost
2018/05/03 Javascript
JavaScript数组方法的错误使用例子
2018/09/13 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
Python脚本判断 Linux 是否运行在虚拟机上
2015/04/25 Python
Python中easy_install 和 pip 的安装及使用
2017/06/05 Python
python多进程使用及线程池的使用方法代码详解
2018/10/24 Python
python数据爬下来保存的位置
2020/02/17 Python
python下载卫星云图合成gif的方法示例
2020/02/18 Python
Python实现JS解密并爬取某音漫客网站
2020/10/23 Python
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
美国受欢迎的眼影品牌:BH Cosmetics
2016/10/25 全球购物
Lentiamo比利时:便宜的隐形眼镜
2020/02/14 全球购物
视光学专业毕业生推荐信
2013/10/28 职场文书
公益活动邀请函
2014/02/05 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
毕业生学校推荐信范文
2014/05/21 职场文书
法定授权委托证明书
2014/09/27 职场文书
立案决定书范文
2015/06/24 职场文书
2016中秋节晚会开场白
2015/11/26 职场文书
创业者如何撰写出一份打动投资人的商业计划书?
2019/07/02 职场文书
导游词之吉林花园山
2019/10/17 职场文书
基于Redis过期事件实现订单超时取消
2021/05/08 Redis
python用tkinter开发的扫雷游戏
2021/06/01 Python
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
2022/01/18 Java/Android
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis