2019独角兽企业重金招聘Python工程师标准>>> hot3.png

在开发中,我们经常需要判断某个对象是否为数组类型,在Js中检测对象类型的常见方法都有哪些呢?

typeof 操作符

对于Function, String, Number ,Undefined 等几种类型的对象来说,他完全可以胜任,但是为Array时

var arr=new Array("1","2","3","4","5");
alert(typeof(arr));
你会收到一个object 的答案,有点让人失望。

instanceof 操作符

JavaScript中instanceof运算符会返回一个 Boolean 值,指出对象是否是特定类的一个实例。 使用方法:result = object instanceof class,还是刚刚的数组,再来一次,嗯,成功的返回 true。

var arrayStr=new Array("1","2","3","4","5");
alert(arrayStr instanceof Array);
小总结:看样子我们今天讨论的问题已经得到了解答,但事实上在多个frame中穿梭就会产生大问题了。

var iframe = document.createElement('iframe');   
document.body.appendChild(iframe);   
xArray = window.frames[window.frames.length-1].Array;      
var arr = new xArray("1","2","3","4","5");//这个写法IE大哥下是不支持的,FF下才有
alert(arr instanceof Array); // false
alert(arr.constructor === Array); // false
返回结果为两个False,让人大失所望。

ECMA-262 写道

Object.prototype.toString( ) When the toString method is called, the following steps are taken:

Get the [[Class]] property of this object.
Compute a string value by concatenating the three strings “[object “, Result (1), and “]”.
Return Result (2)
上面的规范定义了Object.prototype.toString的行为:首先,取得对象的一个内部属性[[Class]],然后依据这个属性,返回一个类似于"[object Array]"的字符串作为结果(看过ECMA标准的应该都知道,[[]]用来表示语言内部用到的、外部不可直接访问的属性,称为“内部属性”)。利用这个方法,再配合call,我们可以取得任何对象的内部属性[[Class]],然后把类型检测转化为字符串比较,以达到我们的目的。还是先来看看在ECMA标准中Array的描述吧。

ECMA-262 写道

new Array([ item0[, item1 [,…]]])
The [[Class]] property of the newly constructed object is set to “Array”.

于是利用这点,第三种方法登场了。

function isArray(obj) {  
  return Object.prototype.toString.call(obj) === '[object Array]';   
}
call改变toString的this引用为待检测的对象,返回此对象的字符串表示,然后对比此字符串是否是'[object Array]',以判断其是否是Array的实例。也许你要问了,为什么不直接o.toString()?嗯,虽然Array继承自Object,也会有toString方法,但是这个方法有可能会被改写而达不到我们的要求,而Object.prototype则是老虎的屁股,很少有人敢去碰它的,所以能一定程度保证其“纯洁性”:)

转载于:https://my.oschina.net/u/232595/blog/469143

JS判断对象是不是数组“Array”相关推荐

  1. JS判断对象是不是数组

    1.通过instanceof判断 instanceof运算符用于检验构造函数的prototype属性是否出现在对象的原型链中的任何位置,返回一个布尔值. let a = []; a instanceo ...

  2. js 判断对象是否是Array

    typeof 使用typeof对于Function.String.Number.Undefined 等几种类型对象都可以验证,但是对于Array时 var arrTest = new Array('1 ...

  3. js判断对象还是数组

    1.对于Javascript 1.8.5(ECMAScript 5),变量名字.isArray( )可以实现这个目的 var a=[]; var b={}; Array.isArray(a);//tr ...

  4. js判断对象是否是数组的几种方式

    js判断对象是否是数组的几种方式 1.通过instanceof判断 instanceof运算符用于检验构造函数的prototype属性是否出现在对象的原型链中的任何位置,返回一个布尔值. let a ...

  5. js判断对象是否为空

    文章目录 一.js判断对象是否为空(三种方法) 二.注: 1. JSON.stringify() 语法 参数说明: 2. Object.keys() 语法 参数 返回值 例子 3. for..in 语 ...

  6. JS判断对象是否为空(个人常用)

    JS判断对象是否为空 1.将json对象转化为json字符串,再判断该字符串是否为"{}" var data = {}; var isNull = (JSON.stringify( ...

  7. JS判断对象是否为空的方法大全

    JS判断对象是否为空的方法大全 1.将json对象转化为json字符串,再判断该字符串是否为"{}" var data = {}; var b = (JSON.stringify( ...

  8. JS判断变量是数组还是对象

    对数组和对象使用typeof,得出的结果都是"object" 使用以下五种方法区分是数组[]还是对象objec 方法一: 使用instanceof进行判断,A instanceof ...

  9. js判断对象数组中是否存在某个对象

    1. 如果要判断数组中是否存在某个元素的话很好判断,直接用数组的indexOf方法就好,存在返回当前索引不存在返回-1 var arr=[1,2,3,4] arr.indexOf(3) // 2 ar ...

最新文章

  1. pandas判断日期是否是闰年(is_leap_year)实战: 数据列转化为日期(时间)格式、判断pandas的日期数据列是否是闰年
  2. 如何在Visual Studio中直接使用示例代码浏览器搜索下载和管理代码示例
  3. java 线程安全的原因_Java并发编程——线程安全性深层原因
  4. 【线性规划与网络流24题】孤岛营救问题 分层图
  5. 【GamePlay】入门篇
  6. Java中的LinkedList
  7. jrockit_JRockit – JRCMD有用的命令
  8. HDFS节点内数据平衡
  9. 云、AI、5G技术融合,会将移动互联网带到什么新高度?
  10. qq发文件大小上限_微信再两个放大招!网友:QQ可以卸载了?
  11. 机器学习 深度学习 ai_什么是AI? 从机器学习到决策自动化
  12. matlab抛物柱面 y 2=2x,求椭圆抛物面2y2+x2=z与抛物柱面2-x2=z的交线关于xOy面的投影柱面和在xOy面上的投影曲线方程...
  13. Cell Biolabs丨艾美捷丨羟脯氨酸检测试剂盒
  14. vue 判断字符串是否是英文_vue rules以及原生js判断字符串是否为正整数(正小数)...
  15. linux编译sqrt,linux c sqrt
  16. There is a problem with this Windows Installer package
  17. SSH访问Amazon EC2实例时权限被拒绝(publickey)[关闭]
  18. java制作闪星星_Silverlight之我见——制作星星闪烁动画
  19. P2471 [SCOI2007]降雨量(线段树)
  20. 脑波和眼动连通性分析 python-(1)

热门文章

  1. Docker安装MySQL教程
  2. Servlet 版本与web.xml配置
  3. EMC -- DFS篇(Documentum Foundation Services)
  4. 网页中使用的特殊字体(webdings, wingdings 2)
  5. Supervisor 配置文件
  6. 发动机冒黑烟_挖掘机冒黑烟,是怎么回事?
  7. log4j不打印日志
  8. tomcat启动时SecureRandom耗时
  9. 第四章 ---- 事务RedisTemplate
  10. python祝福祖国代码_C语言-笔记一