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 相关文章推荐
跨浏览器开发经验总结(三)   警惕“IE依赖综合症”
May 13 Javascript
将Datatable转化成json发送前台实现思路
Sep 06 Javascript
jquery提取元素里的纯文本不包含span等里的内容
Sep 30 Javascript
js如何判断不同系统的浏览器类型
Oct 28 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
Jan 27 Javascript
javascript学习笔记(一)基础知识
Sep 30 Javascript
jQuery获取浏览器类型和版本号的方法
Jul 05 Javascript
使用JS组件实现带ToolTip验证框的实例代码
Aug 23 Javascript
图文讲解vue的v-if使用方法
Feb 11 Javascript
Vue CL3 配置路径别名详解
May 30 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
Jul 28 Javascript
uniapp实现横向滚动选择日期
Oct 21 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数组是否为索引数组的实现方法
2013/06/13 PHP
mcrypt启用 加密以及解密过程详细解析
2013/08/07 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
php隐藏IP地址后两位显示为星号的方法
2014/11/21 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
2019/04/02 PHP
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
javaScript call 函数的用法说明
2010/04/09 Javascript
通过复制Table生成word和excel的javascript代码
2014/01/20 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
2015/04/25 Javascript
JavaScript转换与解析JSON方法实例详解
2015/11/24 Javascript
Jquery zTree 树控件异步加载操作
2016/02/25 Javascript
jQuery简单动画变换效果实例分析
2016/07/04 Javascript
jQuery中的100个技巧汇总
2016/12/15 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
2017/01/04 Javascript
使用JS组件实现带ToolTip验证框的实例代码
2017/08/23 Javascript
js实现多个标题吸顶效果
2020/01/08 Javascript
深入理解javascript中的this
2021/02/08 Javascript
[01:02]2014 DOTA2国际邀请赛中国区预选赛 现场抢先看
2014/05/22 DOTA
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python代码检查工具pylint 让你的python更规范
2012/09/05 Python
深入理解Javascript中的this关键字
2015/03/27 Python
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
快速解决PyCharm无法引用matplotlib的问题
2018/05/24 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
2018/12/04 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
2019/10/10 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
2020/02/25 Python
详解Python中pyautogui库的最全使用方法
2020/04/01 Python
使用python编写一个语音朗读闹钟功能的示例代码
2020/07/14 Python
美国全球旅游运营商:Pacific Holidays
2018/06/18 全球购物
小学三八妇女节活动方案
2014/03/16 职场文书
投资合作意向书范本
2015/05/08 职场文书
2015社区个人工作总结范文
2015/05/13 职场文书
2015年七年级班主任工作总结
2015/05/21 职场文书
奠基仪式致辞
2015/07/30 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书