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 结合C#后台的数组对文章的关键字自动添加链接的代码
Jul 15 Javascript
Jquery动态添加输入框的方法
May 29 Javascript
jQuery仅用3行代码实现的显示与隐藏功能完整实例
Oct 08 Javascript
js中利用tagname和id获取元素的方法
Jan 03 Javascript
jquery选择器中的空格与大于号>、加号+与波浪号~的区别介绍
Jun 24 Javascript
详解AngularJS如何实现跨域请求
Aug 22 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
Nov 09 Javascript
Angular ng-repeat指令实例以及扩展部分
Dec 26 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
Mar 06 Javascript
浅谈如何使用webpack构建多页面应用
May 30 Javascript
vue请求数据的三种方式
Mar 04 Javascript
vue实现公告栏文字上下滚动效果的示例代码
Jun 16 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/21 PHP
Python中使用django form表单验证的方法
2017/01/16 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
jquery 获取json数据实现代码
2009/04/27 Javascript
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
node.js中的emitter.on方法使用说明
2014/12/10 Javascript
Javascript中的Callback方法浅析
2015/03/15 Javascript
JavaScript中字符串分割函数split用法实例
2015/04/07 Javascript
异步JavaScript编程中的Promise使用方法
2015/07/28 Javascript
js实现点击获取验证码倒计时效果
2021/01/28 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
完美的js div拖拽实例代码
2016/09/24 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
2016/12/31 Javascript
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
JavaScript数组方法的错误使用例子
2018/09/13 Javascript
vscode下的vue文件格式化问题
2018/11/28 Javascript
vue.js使用v-model实现表单元素(input) 双向数据绑定功能示例
2019/03/08 Javascript
express框架下使用session的方法
2019/07/31 Javascript
Python文件操作基本流程代码实例
2017/12/11 Python
Python之reload流程实例代码解析
2018/01/29 Python
利用python如何处理nc数据详解
2018/05/23 Python
python Flask 装饰器顺序问题解决
2018/08/08 Python
Python获取时间戳代码实例
2019/09/24 Python
python实现电子词典
2020/03/03 Python
Python包资源下载路径报404解决方案
2020/11/05 Python
CSS类名支持中文命名的示例
2014/04/04 HTML / CSS
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
英国在线药房:Chemist.co.uk
2019/03/26 全球购物
小学教师的个人自我鉴定
2013/10/24 职场文书
教师申诉制度
2014/01/29 职场文书
党的群众路线教育实践活动方案
2014/10/31 职场文书
2014年底个人工作总结
2015/03/10 职场文书
回复函格式及范文
2015/07/14 职场文书
Html5调用企业微信的实现
2021/04/16 HTML / CSS
用Python将GIF动图分解成多张静态图片
2021/06/11 Python