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对象所有属性和方法的函数
Oct 16 Javascript
jqGrid日期格式的判断示例代码(开始日期与结束日期)
Nov 08 Javascript
解决jquery中美元符号命名冲突问题
Jan 08 Javascript
浅谈javascript基础之客户端事件驱动
Jun 10 Javascript
input输入密码变黑点密文的实现方法
Jan 09 Javascript
bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能
Feb 17 Javascript
详解Layer弹出层样式
Aug 21 Javascript
React优化子组件render的使用
May 12 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
Nov 07 Javascript
解决$store.getters调用不执行的问题
Nov 08 Javascript
vue 微信扫码登录(自定义样式)
Jan 06 Javascript
Openlayers实现地图的基本操作
Sep 28 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
蝙蝠侠:侠影之谜
2020/03/04 欧美动漫
CI框架文件上传类及图像处理类用法分析
2016/05/18 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
mapper--图片热点区域高亮组件官方站点
2007/12/22 Javascript
jquery中的 $("#jb51")与document.getElementById("jb51") 的区别
2011/07/26 Javascript
jQuery LigerUI 使用教程表格篇(1)
2012/01/18 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
2014/08/15 Javascript
js用Date对象的setDate()函数对日期进行加减操作
2014/09/18 Javascript
js读取cookie方法总结
2014/10/31 Javascript
ajax+jQuery实现级联显示地址的方法
2015/05/06 Javascript
使用AngularJS创建单页应用的编程指引
2015/06/19 Javascript
JavaScript数组去重的五种方法
2015/11/05 Javascript
在JavaScript中call()与apply()区别
2016/01/22 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
jQuery学习笔记之回调函数
2016/08/15 Javascript
JS轮播图中缓动函数的封装
2020/11/25 Javascript
Vue.js实现文章评论和回复评论功能
2020/05/30 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
2020/04/12 Javascript
mpvue性能优化实战技巧(小结)
2019/04/17 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
JS实现可控制的进度条
2020/03/25 Javascript
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
2018/01/30 Python
Python中字符串List按照长度排序
2019/07/01 Python
TensorFlow-gpu和opencv安装详细教程
2020/06/30 Python
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
美体小铺奥地利官方网站:The Body Shop奥地利
2019/04/11 全球购物
护理专业毕业生推荐信
2013/10/31 职场文书
出国签证在职证明
2014/01/16 职场文书
立志成才演讲稿
2014/09/04 职场文书
水电维修专业推荐信
2014/09/06 职场文书
秦始皇兵马俑导游词
2015/02/02 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
开学第一周总结
2015/07/16 职场文书
Go归并排序算法的实现方法
2022/04/06 Golang