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实现在小方框中浏览大图的代码
Aug 14 Javascript
YUI 读码日记之 YAHOO.util.Dom - Part.1
Mar 22 Javascript
script标签属性type与language使用选择
Dec 02 Javascript
JQuery验证工具类搜集整理
Jan 16 Javascript
判断浏览器的内核及版本号方法汇总
Jan 05 Javascript
15款jQuery分布引导插件分享
Feb 04 Javascript
js改变Iframe中Src的方法
May 05 Javascript
浅谈JavaScript的内置对象和浏览器对象
Jun 03 Javascript
基于Vue实现图书管理功能
Oct 17 Javascript
微信小程序云开发(数据库)详解
May 17 Javascript
Echarts.js无法引入问题解决方案
Oct 30 Javascript
JavaScript数组 几个常用方法总结
Nov 11 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图片上传程序
2008/03/27 PHP
PHP编写RESTful接口的方法
2016/02/21 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
PHP执行普通shell命令流程解析
2020/08/24 PHP
Node.js开发指南中的简单实例(mysql版)
2013/09/17 Javascript
JavaScript内存管理介绍
2015/03/13 Javascript
javascript实现网站加入收藏功能
2015/12/16 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
关于JavaScript中forEach和each用法浅析
2017/07/27 Javascript
vue打包后显示空白正确处理方法
2017/11/01 Javascript
Vuejs实现购物车功能
2017/11/05 Javascript
JS集合set类的实现与使用方法示例
2019/02/01 Javascript
使用vuepress搭建静态博客的示例代码
2019/02/14 Javascript
使用Node.js实现一个多人游戏服务器引擎
2019/03/13 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
vuex actions异步修改状态的实例详解
2019/11/06 Javascript
微信小程序实现星星评分效果
2020/11/01 Javascript
Python 备份程序代码实现
2017/03/06 Python
python分批定量读取文件内容,输出到不同文件中的方法
2018/12/08 Python
Python 获取主机ip与hostname的方法
2018/12/17 Python
python实现图片转字符小工具
2019/04/30 Python
wxPython实现文本框基础组件
2019/11/18 Python
Python dict和defaultdict使用实例解析
2020/03/12 Python
Keras在训练期间可视化训练误差和测试误差实例
2020/06/16 Python
python字典的值可以修改吗
2020/06/29 Python
python如何变换环境
2020/07/21 Python
简单掌握CSS3将文字描边及填充文字颜色的方法
2016/03/07 HTML / CSS
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
viagogo法国票务平台:演唱会、体育比赛、戏剧门票
2017/03/27 全球购物
八年级物理教学反思
2014/01/19 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
入党政审材料范文
2014/12/24 职场文书
女性健康讲座主持词
2015/07/04 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书
React配置子路由的实现
2021/06/03 Javascript