博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
判断某个对象是不是数组
阅读量:6481 次
发布时间:2019-06-23

本文共 2184 字,大约阅读时间需要 7 分钟。

总结《JavaScriptt高级程序设计》中介绍判断某个对象是否是数组的方法。

第一种方法:

使用instanceof操作符。instanceof操作符用来判断要检测对象的原型链上是否存在某个构造函数的prototype属性。

语法: A instanceof B,意思是对象A的原型是否是B.prototype。如果是,返回true,如果不是,返回false。

1 var a={};2   var b=[];3   console.log(a instanceof Object);//true4   console.log(b instanceof Array);//true

使用instanceof操作符有一个问题就是,它假定只有一个全局作用域。如果一个网页中有多个框架(iframe元素),那实际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的Array构造函数。如果你从一个框架向另一个框架传入一个数组,那么传入的数组与在第二个框架中原生创建的数组分别具有各自不同的构造函数。传入的数组在该框架中用instanceof操作符判断就会返回false。代码如下:

1   var a={}; 2   var b=[]; 3   console.log(a instanceof Object);//true 4   console.log(b instanceof Array);//true 5    6   var frame=document.createElement("iframe");//创建一个框架 7   document.body.appendChild(frame); 8   var c=window.frames[0].Array;//取得框架全局执行环境中的Array构造函数 9   var d=new c();//在框架全局执行环境中创建一个数组d10   console.log(d instanceof Array);//在当前页面的执行环境中用instanceof操作符判断d是否为数组,返回false11   console.log(Array.isArray(d));//true

第二种方法:

使用ECMAScript 5新增的Array.isArray()方法。这个方法的作用就是确定某个值到底是不是数组,而不管它到底是在哪个全局执行环境中创建的。

第三种方法:

使用使用Object.prototype上的原生toString()方法判断。

使用方法如下:

Object.prototype.toString.call(value)
该方法返回一个[object NativeConstructorName]格式的字符串。每个类在内部都有一个[[Class]]属性,这个属性中就指定了上述字符串中的构造函数名。
该方法不能检测非原生构造函数的函数名,因此开发人员定义的任何构造函数都将返回[object Object]。
1   var a={}; 2   var b=[]; 3   var frame=document.createElement("iframe");//创建一个框架 4   document.body.appendChild(frame); 5   var c=window.frames[0].Array;//取得框架全局执行环境中的Array构造函数 6   var d=new c();//在框架全局执行环境中创建一个数组d 7   console.log(Object.prototype.toString.call(a));//[object Object] 8   console.log(Object.prototype.toString.call(b));//[object Array] 9   console.log(Object.prototype.toString.call(d));//[object Array]10   11   function Person() {12      this.name=name;13   }14   var n=new Person();15   console.log(Object.prototype.toString.call(n));//[object Object]

参考:

1、js如何判断一个对象是不是Array? http://www.nowamagic.net/librarys/veda/detail/1250

2、JavaScript中toStirng()与Object.prototype.toString.call()方法浅谈 http://www.zhufengpeixun.cn/JavaScriptmianshiti/2014-02-28/271.html

3、JavaScript:Object.prototype.toString方法的原理 http://www.cnblogs.com/ziyunfei/archive/2012/11/05/2754156.html

 

转载于:https://www.cnblogs.com/fogwind/p/5884684.html

你可能感兴趣的文章
初次使用 VUX
查看>>
javascript 字符串转数字的简便写法
查看>>
html之div始终停留在屏幕中间部分
查看>>
Spring中jdbcTemplate的用户实例
查看>>
[模板] 快速傅里叶变换/FFT/NTT
查看>>
DecimalFormat 数据格式设置 SimpleDateFormat时间格式的用法介绍 --转载
查看>>
Android 的Margin和Padding属性以及支持的长度单位
查看>>
HDU ACM 1050 Moving Tables
查看>>
Django templates加载css/js/image等静态资源
查看>>
Eclipse C + GTK2.0环境构筑
查看>>
caffe solver
查看>>
Rhel6-heartbeat+lvs配置文档
查看>>
ORACLE分科目统计每科前三名的学生的语句
查看>>
0317复利计算的回顾与总结
查看>>
函数对象
查看>>
最全最新个税计算公式---今天你税了吗?
查看>>
linux shell 正则表达式(BREs,EREs,PREs)差异比较(转,当作资料查)
查看>>
MongoDB--CSharp Driver Quickstart .
查看>>
二分法求平方根(Python实现)
查看>>
使用startActivityForResult方法(转)
查看>>