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 相关文章推荐
使两个iframe的高度与内容自适应,且相等
Nov 20 Javascript
Extjs优化(一)删除冗余代码提高运行速度
Apr 15 Javascript
封装html的select标签的js操作实例
Jul 02 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
May 04 Javascript
实现无刷新联动例子汇总
May 20 Javascript
jquery.cookie实现的客户端购物车操作实例
Dec 24 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
Jun 16 Javascript
jQuery使用zTree插件实现可拖拽的树示例
Sep 23 jQuery
jquery点击回车键实现登录效果并默认焦点的方法
Mar 09 jQuery
node 命令方式启动修改端口的方法
May 12 Javascript
微信小程序实现漂亮的弹窗效果
May 26 Javascript
小程序实现按下录音松开识别语音
Nov 22 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来检测proxy
2006/10/09 PHP
在PHP中使用模板的方法
2008/05/24 PHP
php实现首页链接查询 友情链接检查的代码
2010/01/05 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
2015/11/30 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
PHP通过GD库实现验证码功能示例
2019/02/23 PHP
MooTools 1.2中的Drag.Move来实现拖放
2009/09/15 Javascript
jQuery代码优化 选择符篇
2011/11/01 Javascript
Android中资源文件(非代码部分)的使用概览
2012/12/18 Javascript
JavaScript实现基于Cookie的存储类实例
2015/04/10 Javascript
JavaScript获取IP获取的是IPV6 如何校验
2016/06/12 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
JS中的两种数据类型及实现引用类型的深拷贝的方法
2018/08/12 Javascript
JS简单判断是否在微信浏览器打开的方法示例
2019/01/08 Javascript
Vue可自定义tab组件用法实例
2019/10/24 Javascript
详解Vue串联过滤器的使用场景
2020/04/30 Javascript
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
python如何使用unittest测试接口
2018/04/04 Python
python使用Turtle库绘制动态钟表
2018/11/19 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
python numpy库linspace相同间隔采样的实现
2020/02/25 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
搭建pypi私有仓库实现过程详解
2020/11/25 Python
python使用scapy模块实现ARP扫描的过程
2021/01/21 Python
马来西亚航空官方网站:Malaysia Airlines
2017/07/28 全球购物
Farfetch巴西官网:奢侈品牌时尚购物平台
2020/10/19 全球购物
物流仓管员岗位职责
2013/12/04 职场文书
党章学习思想汇报
2014/01/14 职场文书
商超业务员岗位职责
2014/03/12 职场文书
2014年计划生育工作总结
2014/11/14 职场文书
2014年图书馆工作总结
2014/11/25 职场文书
会计主管竞聘书
2015/09/15 职场文书
2019中秋节祝福语大全,提前收藏啦
2019/09/10 职场文书
学习师德师风的心得体会(2篇)
2019/10/08 职场文书
go语言求任意类型切片的长度操作
2021/04/26 Golang