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 相关文章推荐
自适应高度框架 ----属个人收藏内容
Jan 22 Javascript
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
Mar 05 Javascript
JS 添加千分位与去掉千分位的示例
Jul 11 Javascript
JQuery 在线引用及测试引用是否成功
Jun 24 Javascript
javascript限制用户只能输汉字中文的方法
Nov 20 Javascript
超漂亮的Bootstrap 富文本编辑器summernote
Apr 05 Javascript
JavaScript生成带有缩进的表格代码
Jun 15 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
Jan 22 jQuery
jQuery中each方法的使用详解
Mar 18 jQuery
Vue常用的几个指令附完整案例
Nov 06 Javascript
Vue 嵌套路由使用总结(推荐)
Jan 13 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
May 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
php遍历目录viewDir函数
2009/12/15 PHP
php file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
2018/05/21 PHP
slice函数的用法 之不错的应用
2006/12/29 Javascript
js nextSibling属性和previousSibling属性概述及使用注意
2013/02/16 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
2016/08/03 Javascript
JS+HTML5 FileReader实现文件上传前本地预览功能
2020/03/27 Javascript
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 jQuery
解决layui 三级联动下拉框更新时回显的问题
2019/09/03 Javascript
JavaScript find()方法及返回数据实例
2020/04/30 Javascript
17个Python小技巧分享
2015/01/23 Python
Python实现的rsa加密算法详解
2018/01/24 Python
对Python 2.7 pandas 中的read_excel详解
2018/05/04 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
2019/05/10 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
在Python中表示一个对象的方法
2019/06/25 Python
pyftplib中文乱码问题解决方案
2020/01/11 Python
python 将html转换为pdf的几种方法
2020/12/29 Python
python元组拆包实现方法
2021/02/28 Python
css3实现背景动态渐变效果
2019/12/10 HTML / CSS
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
英语翻译系毕业生求职信
2013/09/29 职场文书
无故旷工检讨书
2014/01/26 职场文书
怎样拟定创业计划书
2014/05/01 职场文书
党政领导班子民主生活会整改措施
2014/09/18 职场文书
处级干部反四风个人对照检查材料思想汇报
2014/09/27 职场文书
2015年银行个人工作总结
2015/05/14 职场文书
志愿者工作心得体会
2016/01/15 职场文书