用JavaScript判断一个对象是否数组?
Q:如何判断一个对象是否为数组?
A1:判断对象的constructor是否指向Array, 接着判断对应的特殊属性,如length,splice之类.这个很容易冒充。
A2:使用instanceof判断对象是否为数组的实例。一般情况下可行,在某些极端情况下,会出错。例如,有个A页面定义了一个数组a,页面又嵌套了一个iframe,在Iframe里面通过 top.a instanceof Array, 是返回false的.其他情况,见下面详解。
A3:通过Object.prototype.toString.call(obj)这样就可以了,JQ源码也是这样写的。Extjs也是这样写的。这样会返回[Object Array]。如果obj是一个对象,并且拥有一些数组的属性和方法,会返回[object Object],如下:
var obj = {
length:3,
slice:function(){}
};
Object.prorotype.toString.call(obj);//[object Object]
A4:ES5定义了Array.isArray:
Array.isArray([]);//true
对于不支持这个方法的浏览器,可以添加这个方法:
if(typeof Array.isArray === "undefined"){
Array.isArray = function(arg){
return Object.prototype.toString.call(arg) === "[object Array]";
};
}
instanceof相关:
1.构造函数的prototype指向Array的prototype:
function Test(){}
Test.prototype = Array.prototype;
var t = new Test();
alert(t instanceof Array);//true
2.构造函数的prototype指向一个数组:
function Test(){}
Test.prototype = [];
var t = new Test();
alert(t instanceof Array);//true
知道了instanceof的原理,那么前面所说的 top.arr instanceof Array这个问题也自然知道什么原因了,Array实质是window.Array(可以试着判断下), 自然top.Array和iframe内的window.Array是不同的,所以会导致instanceof失效。如果top.arr instanceof top.Array 这样就没问题了。
本文转自:http://www.cnblogs.com/linda586586/p/4227146.html
用JavaScript判断一个对象是否数组?的更多相关文章
- javascript判断是否为数组 面试题
1.方法 instanceof:多框架下有问题(看示例代码). Object.prototype.toString.call():兼容性很好 Array.isArray: IE9+以上 constru ...
- javascript-如何判断一个对象为数组
Q:如何判断一个对象是否为数组? A1:判断对象的constructor是否指向Array, 接着判断对应的特殊属性,如length,splice之类.这个很容易冒充. A2:使用instanceof ...
- JavaScript判断对象和数组
在调用后端接口时,由于后端接口的不规范统一,接口最外层在没有数据时返回的是空数组(其实更想要的是空json对象,接口返回的data数据应该统一返回json对象,便于扩展),而在有数据时返回的是json ...
- JavaScript判断一个对象是否为空
本文介绍了判断一个对象是否为空的几种方法 测试用例 test1 = 1; test2 = {}; test3 = {a:1,b:2} 1. 判断Object.keys()的长度 function _i ...
- javascript 判断是否是数组
function isArray(object){ return object && typeof object==='object' && typeof object ...
- JavaScript判断是否是数组
在 ECMAScript5中定义了一个新的方法Array.isArray(). 如果参数是数组的话,就返回true eg: Array.isArray([]); // true 如果里面换一个类似数组 ...
- JavaScript 判断一个对象的数据类型。
1.isString var isString1 = function (obj){ return Object.prototype.toString.call(obj)==="[objec ...
- JavaScript 判断一个对象{}是否为空对象的简单方法
第一种: function isEmptyObject(obj) { for (var key in obj) { //返回false,不为空对象 return false; } return tru ...
- js面试之--判断一个对象是不是数组类型,一共几种方法???
随机推荐
- Learn How To Create Trigger In Oracle Forms
I have written many posts related to triggers in Oracle Forms, I have given examples for Form Level ...
- Activity的onRestart()方法调用时机
在项目中看到Activity使用onRestart(),平时对这个方法的调用时机知道的比较少,研究一下它啥时候会被调用. 代码很简单: <span style="font-size:1 ...
- String转Map的工具类
借鉴代码 public class StringToMapUtil { public static Map<String, String> getValue(String param) { ...
- hdu 3392(滚动数组优化dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3392 Pie Time Limit: 6000/3000 MS (Java/Others) Me ...
- ehcache缓存刷新问题
ehcache可以设置时间来定时刷新缓存,但是这个只是清空值,key依旧保存着. 只有你第一次利用key获取值,key才会释放.
- centos配置ip
/etc/sysconfig/network-scripts/ifcfg-eth0文件做如下修改 DEVICE=eth0 HWADDR=08:00:27:46:1D:E1 TYPE=Ethernet ...
- javascript的slice(),splice(),split(),substring(),substr()
例子摘抄于http://www.w3school.com.cn/jsref/jsref_obj_array.asp 1.slice(): Array和String对象都有 在Array中 slice ...
- 用buildroot qemu 执行 Android 系统
准备 qemu. 编译 arm 的执行环境 $ wget http://wiki.qemu-project.org/download/qemu-2.0.0.tar.bz2 $ tar xzvf qem ...
- POJ3009 Curling 2.0(DFS)
迷宫问题求最短路. 略有不同的是假设不碰到石头的话会沿着一个方向一直前进,出界就算输了.碰到石头,前方石头会消失,冰壶停在原地. 把这个当作状态的转移. DFS能够求出其最小操作数. #include ...
- Java正确获取客户端真实IP方法整理
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...