es6怎么判断变量是不是数组

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

es6怎么判断变量是不是数组

本教程操作环境: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]';     }; }

登录后复制

【相关推荐:javascript视频教程、web前端】

以上就是es6怎么判断变量是不是数组的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2702340.html

(0)
上一篇 2025年3月7日 19:23:03
下一篇 2025年3月3日 01:11:31

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • es6怎么判断是不是数字

    在es6中,可以利用Number对象的isFinite()方法来判断值是不是数字,该方法可以检测传入的参数值是否是一个有穷数字;语法“Number.isFinite(值)”。 本教程操作环境:windows7系统、ECMAScript 6版…

    2025年3月7日
    200
  • es6怎么将对象转成数组

    在es6中,可以利用Array对象的from()方法来将对象转成数组,该方法可以将一个类数组对象或者可遍历对象转换成一个真正的数组;语法“Array.from(对象)”。 本教程操作环境:windows7系统、ECMAScript 6版、D…

    2025年3月7日
    200
  • javascript数据类型学习之浅析Symbol类型

    本篇文章带大家了解一下es6新增的数据类型:symbol,聊聊symbol类型的声明方式和使用方法,希望对大家有所帮助! Symbol一种新的原始数据类型,表示独一无二的。是javascript中第七种数据类型。另外六种分别是:undefi…

    2025年3月7日
    200
  • es6的await用法是什么

    es6中,await用于等待一个promise的异步请求,异步操作完成后恢复async函数的执行,该关键字只能在“async function”中使用,语法为“async function(){await=返回promise的异步请求}”。…

    2025年3月7日
    200
  • es6中promise对象的状态有哪些

    状态:1、pending进行中的状态,该状态进行初始化,在过程中还没有结果;2、fulfilled成功状态,resolved状态会触发后续的then回调函数;3、rejected失败状态,rejected状态会触发后续的catch回调函数。…

    2025年3月7日
    200
  • es6新增数组方法是什么

    新增数组方法:1、from(),可将类数组或可迭代对象转为真正的数组;2、of(),可将一组值转换为数组,它弥补数组构造函数Array()的不足;3、find()和findIndex(),返回第一个符合条件的数组元素;4、fill()等等。…

    2025年3月7日
    200
  • 你说你会用ES6,那赶紧用上啊!

    本篇文章给大家分享一位leader的十点关于es6的吐槽,并对应补充一些相关知识,希望对大家有所帮助! “你会用ES6,那倒是用啊!”:这是一位leader在一次代码评审会对小组成员发出的“怒吼”,原因是在代码评审中发现很多地方还是采用ES…

    2025年3月7日
    200
  • ie8是否支持es6

    ie8不支持es6。在ie浏览器中,ie10及以下版本是完全不支持es6的,解析不了es6的语法,而ie11可以支持部分es6特性;可以通过判断ie浏览器是否支持箭头函数来检查它是否支持es6,当不支持箭头函数,则代表浏览器不支持ES6。 …

    2025年3月7日
    200
  • 一文快速详解ES6~ES12的全部特性!

    本篇文章给大家整理分享一下ecmascript特性,带大家花一个小时,迅速了解es6~es12的全部特性。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 作为一个喜欢动手敲代码的小菜鸟,我认为代码应该亲自敲一遍,才能更好的…

    2025年3月7日
    200
  • ES6数组新增方法知识点总结

    本篇文章给大家带来了关于javascript的相关知识,其中主要介绍了es6数组新增方法的相关问题,包括了迭代方法和归并方法等等内容,下面一起来看一下,希望对大家有帮助。 【相关推荐:javascript视频教程、web前端】 迭代方法: …

    2025年3月7日
    200

发表回复

登录后才能评论