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里元素的方法可传参
Sep 11 Javascript
基于jquery自定义的漂亮单选按钮RadioButton
Nov 19 Javascript
jQuery中live()方法用法实例
Jan 19 Javascript
JavaScript动态加载样式表的方法
Mar 21 Javascript
基于jQuery实现仿51job城市选择功能实例代码
Mar 02 Javascript
Angularjs中UI Router的使用方法
May 14 Javascript
分享一个插件实现水珠自动下落效果
Jun 01 Javascript
EasyUI学习之Combobox下拉列表(1)
Dec 29 Javascript
详解vue嵌套路由-params传递参数
May 23 Javascript
Vue常用指令详解分析
Aug 19 Javascript
Axios代理配置及封装响应拦截处理方式
Apr 07 Vue.js
vue如何在data中引入图片的正确路径
Jun 05 Vue.js
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
mysql总结之explain
2012/02/27 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
2013/04/12 Javascript
extjs 时间范围选择自动判断的实现代码
2014/06/24 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
JS采用绝对定位实现回到顶部效果完整实例
2016/06/20 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
node.js爬虫爬取拉勾网职位信息
2017/03/14 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
Vue实现数字输入框中分割手机号码的示例
2017/10/10 Javascript
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
jQuery实现左右滑动的toggle方法
2018/03/03 jQuery
JavaScript对象访问器Getter及Setter原理解析
2020/12/08 Javascript
python中的列表推导浅析
2014/04/26 Python
Python补齐字符串长度的实例
2018/11/15 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
2019/05/15 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
python3 正则表达式基础廖雪峰
2020/03/25 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
html5实现完美兼容各大浏览器的播放器
2014/12/26 HTML / CSS
Blue Nile台湾:钻石珠宝商,订婚首饰、结婚戒指和精品首饰
2017/11/24 全球购物
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
JYSK加拿大:购买家具、床垫、家居装饰等
2020/02/14 全球购物
如何防止同一个帐户被多人同时登录
2013/08/01 面试题
药学专业个人的自我评价
2013/12/31 职场文书
四风存在的原因分析
2014/02/11 职场文书
致共产党员倡议书
2014/04/16 职场文书
大学生党员自我评价
2015/03/04 职场文书
《假如》教学反思
2016/02/17 职场文书
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers
以MySQL5.7为例了解一下执行计划
2022/04/13 MySQL