JS的经典问题之一就是“检测一个对象是不是数组”,本文总结了3种检测方法。

instanceof检测方法

var arr = [];
if (arr instanceof Array) {// do something
}

存在问题
instanceof 操作符假设只有一个全局执行环境。如果网页中包含多个框架,那实际上存在两个以上的不同全局执行环境,从而存在两个以上不同版本的Array构造函数。如果从一个框架向另一个框架传入数组,那么传入的数组与第二框架中原生的数组分别具有各自不同的构造函数。从而将传入的数组误判为非数组。

如果只有一个全局执行环境,可以用 instanceof 检测数组。

Array.isArray()方法

var arr = [];
if (Array.isArray(arr)) {// do something
}

这个方法克服了instanceof的问题,可以确定某个变量是不是数组,而不管它是在哪个全局执行环境中创建的。
但是支持Array.isArray()方法的浏览器有IE9+、Firefox4+、Safari5+、Opera10.5+和Chrome。对于不支持这个方法的浏览器怎么办呢?第三种——万能方法。

万能方法

function isArray(arr) {return Object.prototype.toString.call(arr) == '[object Array]';
}var arr = [];
isArray(arr);

原理
在任何值上调用Object原生的toString() 方法,都会返回一个[object NativeConstructorName] 格式的字符串。每个类在内部都有一个[ [Class] ]属性,这个属性就指定了上述字符串中的构造函数名NativeConstructorName。如:

var arr = [];
console.log(Object.pototype.toString.call(arr)); // "[object Array]"

这种思路也可用于检测某个值是不是原生函数或正则表达式。

// Array
Object.prototype.toString.call(value); // "[object Array]"// Function
Object.prototype.toString.call(value); // "[object Function]"// RegExp
Object.prototype.toString.call(value); // "[object RegExp]"// Date
Object.prototype.toString.call(value); // "[object Date]"

Object的toString()方法不能检测非原生的构造函数的构造函数名,因此,开发人员定义的任何构造函数都将返回[object Object]。

[学习笔记] JavaScript 检测数组相关推荐

  1. JavaScript学习笔记:检测数组方法

    很多时候我们需要对JavaScript中数据类型( Function . String . Number . Undefined . Boolean 和 Object )做判断.在JavaScript ...

  2. Web前端学习笔记——JavaScript之数组、函数、作用域

    数组 为什么要学习数组 之前学习的数据类型,只能存储一个值(比如:Number/String.我们想存储班级中所有学生的姓名,此时该如何存储? 数组的概念 所谓数组,就是将多个元素(通常是同一类型)按 ...

  3. HTML5学习笔记 —— JavaScript基础知识

    HTML5学习笔记 -- JavaScript基础知识 标签: html5javascriptweb前端 2017-05-11 21:51 883人阅读 评论(0) 收藏 举报 分类: JavaScr ...

  4. HALCON 21.11:深度学习笔记---对象检测, 实例分割(11)

    HALCON 21.11:深度学习笔记---对象检测, 实例分割(11) HALCON 21.11.0.0中,实现了深度学习方法. 本章介绍了如何使用基于深度学习的对象检测. 通过对象检测,我们希望在 ...

  5. HALCON 21.11:深度学习笔记---异常检测(9)

    HALCON 21.11:深度学习笔记---异常检测(9) HALCON 21.11.0.0中,实现了深度学习方法. 本章介绍了如何使用基于深度学习的异常检测. 通过异常检测,我们想要检测图像是否包含 ...

  6. 学习笔记 JavaScript 动画

    学习笔记 JavaScript 动画 结果 代码里用到的图片 <html><head><style>#imageDiv {height: 100px;width: ...

  7. 学习笔记 JavaScript 动画 加速

    学习笔记 JavaScript 动画 加速 效果 代码中用到的图片 <html><head><style>#imageDiv {position: absolute ...

  8. 12月28日 OpenCV 实战基础学习笔记——疲劳检测

    文章目录 前言 一.眨眼疲劳检测 前言 本文为12月28日 OpenCV 实战基础学习笔记--疲劳检测. 一.眨眼疲劳检测 from scipy.spatial import distance as ...

  9. 9月1日目标检测学习笔记——文本检测

    文章目录 前言 一.类型 1.Top-Down 2.Bottom-up 二.基于深度学习的文本检测模型 1.CTPN 2.RRPN 3.FTSN 4.DMPNet 5.EAST 6.SegLink 7 ...

最新文章

  1. 京东金融晒 “打黑成绩单”:一年内避免用户损失上亿元
  2. where 1=1 是什么鬼?
  3. 装逼一步到位!GauGAN代码解读来了
  4. 考研计算机组成原电路知识,2021考研计算机大纲408计算机组成原理部分原文解析...
  5. 巴斯腾和巴乔谁强一些
  6. spring boot记录操作日志
  7. altera fpga 型号说明_基于FPGA的USB2.0接口通信
  8. NOI[2001]食物链
  9. 无限乱斗机器人ap出装_另类出装畅玩无限乱斗!AP小丑成致胜黑科技
  10. shell命令总结一
  11. 数据湖探索DLI新功能:基于openLooKeng的交互式分析
  12. js操作Cookie,js设置Cookie值,js读取Cookie值
  13. 解剖 Facebook 底层
  14. 关于IE上embed自动播放
  15. OCT-视网膜分层处理
  16. CrossApp logo 跨平台app开发引擎
  17. FreeRTOS学习 消息队列
  18. c语言//求10个数字平均数
  19. Task 05 Python 爬虫入门
  20. C语言学习——运算符

热门文章

  1. Python实现字符串对齐
  2. 第2章[2.4] Ext JS的类与类体系
  3. mysql sql_log_bin怎么看_MySQL数据库之开启和查看mysql的bin-log日志
  4. poj(2406) kmp
  5. Nacos 配置集导出和导入
  6. javajs ---- 判断字符串中是否包含子串
  7. java抽象类及其派生类_java抽象类
  8. evb测试板_DVT测试方案
  9. loading窗口动画 web_分享web前端七款HTML5 Loading动画特效集锦
  10. java主函数_《左手 Java 右手 Python 》之 Java 的安装与初识(1)