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 相关文章推荐
jquery获取input表单值的代码
Apr 19 Javascript
如何使用json在前后台进行数据传输实例介绍
Apr 11 Javascript
让table变成exls的示例代码
Mar 24 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
Jun 06 Javascript
JavaScript关于提高网站性能的几点建议(一)
Jul 24 Javascript
JS作用域闭包、预解释和this关键字综合实例解析
Dec 16 Javascript
JS实现碰撞检测的方法分析
Jan 19 Javascript
微信小程序使用template标签实现五星评分功能
Nov 03 Javascript
JS实现从对象获取对象中单个键值的方法示例
Jun 05 Javascript
JavaScript变量Dom对象的所有属性
Apr 30 Javascript
VUE : vue-cli中去掉路由中的井号#操作
Sep 04 Javascript
JavaScript中条件语句的优化技巧总结
Dec 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整合PayPal支付
2015/06/11 PHP
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
2008/09/27 Javascript
Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐
2011/01/27 Javascript
javascript使用location.search的示例
2013/11/05 Javascript
javascript放大镜效果的简单实现
2013/12/09 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
JS循环遍历JSON数据的方法
2014/07/08 Javascript
javaScript中Math()函数注意事项
2015/06/18 Javascript
jQuery中的deferred使用方法
2017/03/27 jQuery
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
在vue中通过axios异步使用echarts的方法
2018/01/13 Javascript
深入理解移动前端开发之viewport
2018/10/19 Javascript
ES6基础之数组和对象的拓展实例详解
2019/08/22 Javascript
python 执行shell命令并将结果保存的实例
2018/05/11 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
python集合比较(交集,并集,差集)方法详解
2018/09/13 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
Python 输入一个数字判断成绩分数等级的方法
2018/11/15 Python
详解Django CAS 解决方案
2019/10/30 Python
基于python的列表list和集合set操作
2019/11/24 Python
从numpy数组中取出满足条件的元素示例
2019/11/26 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
python实现图像拼接功能
2020/03/23 Python
python+adb命令实现自动刷视频脚本案例
2020/04/23 Python
HTML5之SVG 2D入门8—文档结构及相关元素总结
2013/01/30 HTML / CSS
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
销售心得体会
2014/01/02 职场文书
财务支持类个人的自我评价
2014/02/14 职场文书
高中军训感言1000字
2014/03/01 职场文书
奥运会口号
2014/06/13 职场文书
人力资源管理毕业求职信
2014/08/05 职场文书
领导参观欢迎词
2015/01/26 职场文书
委托书英文
2015/01/28 职场文书
2015年留守儿童工作总结
2015/05/22 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
python 判断文件或文件夹是否存在
2022/03/18 Python