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 相关文章推荐
ExtJS Ext.MessageBox.alert()弹出对话框详解
Apr 02 Javascript
使用不同的方法结合/合并两个JS数组
Sep 18 Javascript
js闭包实现按秒计数
Apr 23 Javascript
jquery实现九宫格大转盘抽奖
Nov 13 Javascript
JavaScript基础之AJAX简单的小demo
Jan 29 Javascript
JS简单获取日期相差天数的方法
Apr 24 Javascript
Vue自定义toast组件的实例代码
Aug 15 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
Nov 09 Javascript
JS对象和字符串之间互换操作实例分析
Feb 02 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
Apr 01 Javascript
如何通过javaScript去除字符串两端的空白字符
Feb 06 Javascript
npm qs模块使用详解
Feb 07 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超级全局变量
2010/01/26 PHP
关于PHP堆栈与列队的学习
2013/06/21 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
2014/05/12 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
2017/10/24 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
js中符号转意问题示例探讨
2013/08/19 Javascript
文本框文本自动补全效果示例分享
2014/01/19 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
2016/06/09 Javascript
jquery中live()方法和bind()方法区别分析
2016/06/23 Javascript
jQuery实现判断控件是否显示的方法
2017/01/11 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
[02:05]2014DOTA2西雅图邀请赛 老队长全明星大猜想谁不服就按进显示器
2014/07/08 DOTA
python3抓取中文网页的方法
2015/07/28 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
一个基于flask的web应用诞生 flask和mysql相连(4)
2017/04/11 Python
python 同时读取多个文件的例子
2019/07/16 Python
python logging设置level失败的解决方法
2020/02/19 Python
python-图片流传输的思路及示例(url转换二维码)
2020/12/21 Python
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
通信专业个人自我鉴定
2013/10/21 职场文书
全国道德模范事迹
2014/02/01 职场文书
高中生评语大全
2014/04/25 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
村级四风对照检查材料
2014/08/24 职场文书
韩语专业职业生涯规划范文:成功之路就在我们脚下
2014/09/11 职场文书
工伤事故赔偿协议书范文
2014/09/24 职场文书
单身证明范本
2015/06/15 职场文书
2015年小学语文教师工作总结
2015/10/23 职场文书
MySQL sql_mode修改不生效的原因及解决
2021/05/07 MySQL
python 中的@运算符使用
2021/05/26 Python
使用kubeadm命令行工具创建kubernetes集群
2022/03/31 Servers