千家信息网

es6如何判断变量是不是数组

发表于:2025-02-12 作者:千家信息网编辑
千家信息网最后更新 2025年02月12日,小编给大家分享一下es6如何判断变量是不是数组,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在es6中,可以利用Array
千家信息网最后更新 2025年02月12日es6如何判断变量是不是数组

小编给大家分享一下es6如何判断变量是不是数组,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

在es6中,可以利用Array的isArray()方法来判断变量是不是数组,该方法用于判断一个对象是否为数组类型,语法"Array.isArray(obj)";如果对象是数组返回true,否则返回false。

本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。

在ES5中判断变量是否为数组

在ES5中,我们至少有如下5种方式去判断一个值是否数组:

var a = []; // 1.基于instanceof a instanceof Array; // 2.基于constructor a.constructor === Array; // 3.基于Object.prototype.isPrototypeOf Array.prototype.isPrototypeOf(a); // 4.基于getPrototypeOf Object.getPrototypeOf(a) === Array.prototype; // 5.基于Object.prototype.toString Object.prototype.toString.apply(a) === '[object Array]';

以上,除了Object.prototype.toString外,其它方法都不能正确判断变量的类型。

要知道,代码的运行环境十分复杂,一个变量可能使用浑身解数去迷惑它的创造者。且看

var a = {    __proto__: Array.prototype}; // 分别在控制台试运行以下代码 // 1.基于instanceof a instanceof Array; // => true // 2.基于constructor a.constructor === Array; // => true // 3.基于Object.prototype.isPrototypeOf Array.prototype.isPrototypeOf(a); // => true // 4.基于getPrototypeOf Object.getPrototypeOf(a) === Array.prototype; // => true

以上,4种方法将全部返回true,为什么呢?我们只是手动指定了某个对象的__proto__属性为Array.prototype,便导致了该对象继承了Array对象,这种毫不负责任的继承方式,使得基于继承的判断方案瞬间土崩瓦解。

不仅如此,我们还知道,Array是堆数据,变量指向的只是它的引用地址,因此每个页面的Array对象引用的地址都是不一样的。iframe中声明的数组,它的构造函数是iframe中的Array对象。如果在iframe声明了一个数组x,将其赋值给父页面的变量y,那么在父页面使用y instanceof Array ,结果一定是false的。而最后一种返回的是字符串,不会存在引用问题。实际上,多页面或系统之间的交互只有字符串能够畅行无阻。

在ES6中判断变量是否为数组

鉴于数组的常用性,在ES6中新增了Array.isArray方法,使用此方法判断变量是否为数组,则非常简单,如下:

Array.isArray([]); // => true Array.isArray({0: 'a', length: 1}); // => false

实际上,通过Object.prototype.toString去判断一个值的类型,也是各大主流库的标准。因此Array.isArray的polyfill通常长这样:

if (!Array.isArray){     Array.isArray = function(arg){         return Object.prototype.toString.call(arg) === '[object Array]';     }; }

以上是"es6如何判断变量是不是数组"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

数组 变量 对象 方法 页面 篇文章 类型 代码 内容 只是 地址 字符 字符串 实际 实际上 方式 环境 系统 复杂 土崩瓦解 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 U8安装英文版数据库 登陆后台数据库连接失败 诛仙手游服务器总是断开连接 网络安全最牛的人是 珠海市模具制造管理软件开发 网络安全板块基金排名 政务大厅网络安全保障工作方案 忍者必须死3都有什么服务器 复印机扫描提示服务器错误 本溪互助盘软件开发设计 dell服务器T30管理口 金运大厦软件开发 网络安全意识树的不牢 东莞软件开发驻场哪家专业 网络安全基础信息检查报告 四川服务器维修调试价格 娄底软件开发培训排名 四平导航软件开发 大话西游服务器开服列表 2路刀片服务器 招商银行软件开发招聘信息 全民奇迹服务器 企业的主要网络安全问题 网络数据库技术的 作业 软件开发台式机配置2021年 数据库3级别的锁是怎么产生的 网络技术服务税收分类编码 关于学生网络安全素材 要求软件开发严格按照需求 nba2k20ps4连接服务器
0