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 相关文章推荐
JavaScript修改css样式style
Apr 15 Javascript
javascript判断iphone/android手机横竖屏模式的函数
Dec 20 Javascript
jQuery表格排序组件-tablesorter使用示例
May 26 Javascript
修改或扩展jQuery原生方法的代码实例
Jan 13 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
Mar 13 Javascript
js判断子窗体是否关闭的方法
Aug 11 Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
Feb 16 Javascript
angular+bootstrap的双向数据绑定实例
Mar 03 Javascript
jQuery插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
Mar 24 jQuery
详解react-native-fs插件的使用以及遇到的坑
Sep 12 Javascript
小程序图片剪裁加旋转的示例代码
Jul 10 Javascript
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
Sep 04 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之Memcache学习笔记
2013/06/17 PHP
用PHP和Shell写Hadoop的MapReduce程序
2014/04/15 PHP
一文看懂PHP进程管理器php-fpm
2020/06/01 PHP
javascript编程起步(第三课)
2007/02/27 Javascript
JavaScript 学习笔记一些小技巧
2010/03/28 Javascript
js实现禁止中文输入的方法
2015/01/14 Javascript
js中跨域方法原理详解
2015/07/19 Javascript
jquery 仿锚点跳转到页面指定位置的实例
2017/02/14 Javascript
Vue.js学习笔记之修饰符详解
2017/07/25 Javascript
基于vue-upload-component封装一个图片上传组件的示例
2018/10/16 Javascript
vue.js实现左边导航切换右边内容
2019/10/21 Javascript
[02:20]DOTA2英雄基础教程 黑暗贤者
2013/12/19 DOTA
[01:59]DOTA2首部纪录片《Free to play》预告片
2014/03/12 DOTA
用Python实现一个简单的线程池
2015/04/07 Python
Python编程给numpy矩阵添加一列方法示例
2017/12/04 Python
Java及python正则表达式详解
2017/12/27 Python
python print 按逗号或空格分隔的方法
2018/05/02 Python
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
Python基础学习之函数方法实例详解
2019/06/18 Python
Python实现计算对象的内存大小示例
2019/07/10 Python
python如何从文件读取数据及解析
2019/09/19 Python
python读取yaml文件后修改写入本地实例
2020/04/27 Python
python3 循环读取excel文件并写入json操作
2020/07/14 Python
Python tkinter实现日期选择器
2021/02/22 Python
HTML5实时语音通话聊天MP3压缩传输3KB每秒
2019/08/28 HTML / CSS
Canvas实现保存图片到本地的示例代码
2018/06/28 HTML / CSS
Nº21官方在线商店:numeroventuno.com
2019/09/26 全球购物
大学生应聘推荐信范文
2013/11/19 职场文书
爽歪歪广告词
2014/03/20 职场文书
过程装备与控制工程专业求职信
2014/07/02 职场文书
学生个人总结范文
2015/02/15 职场文书
2015年食堂工作总结报告
2015/04/23 职场文书
铁人纪念馆观后感
2015/06/16 职场文书
酒店温馨提示语
2015/07/14 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书
Python time库的时间时钟处理
2021/05/02 Python