js如何判断一个对象是不是Array
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(arrayStrinstanceof 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(arrinstanceof 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”.
于是利用这点,第三种方法登场了。
functionisArray(obj) {return Object.prototype.toString.call(obj) === '[object Array]'; }
call改变toString的this引用为待检测的对象,返回此对象的字符串表示,然后对比此字符串是否是'[object Array]',以判断其是否是Array的实例。也许你要问了,为什么不直接o.toString()?嗯,虽然Array继承自Object,也会有 toString方法,但是这个方法有可能会被改写而达不到我们的要求,而Object.prototype则是老虎的屁股,很少有人敢去碰它的,所以能 一定程度保证其“纯洁性”:)
与前面几个方案不同,这个方法很好的解决了跨frame对象构建的问题,经过测试,各大浏览器兼容性也很好,可以放心使用。一个好消息是,很多 框架,比如jQuery、Base2等等,都计划借鉴此方法以实现某些特殊的,比如数组、正则表达式等对象的类型判定,不用我们自己写了。
另外Ext3 也已经换成这样的写法了
isArray : function(v){return toString.apply(v) === '[object Array]'; }
转载于:https://www.cnblogs.com/liaojie970/p/5254797.html
js如何判断一个对象是不是Array相关推荐
- js如何判断一个对象是不是Array?
在开发中,我们经常需要判断某个对象是否为数组类型,在Js中检测对象类型的常见方法都有哪些呢? typeof 操作符 对于Function, String, Number ,Undefined 等几种类 ...
- JS 中判断一个对象是否为数组对象?
在面向对象中 判断一个对象中 判断一个对象是否为数组 1 可以查找它的原型 (__proto__) 是否为数组对象的原型对象 var arr1 = [1,2,3];console.log(arr1._ ...
- JS如何判断一个对象是否为空、是否有某个属性
一.JS判断一个对象是否为空 方法一: let obj1 = {} let obj2 = {a:1} function empty(obj){for (let key in obj){return f ...
- [JS] 如何判断一个对象是否为空
js判断空对象的几种方法 一.将对象转为字符串比较 let a = {} console.log(JSON.stringify(a) === '{}') //true 二.for-in循环 funct ...
- js中判断一个对象是否存在
一.Boolean()方法 用Boolean()方法可以将Js中的任意数据类型转为布尔值: 二.用于判断xx是否存在 js一般会自动执行Boolean()方法,我们可以借此判断某个对象在js当前的执行 ...
- js判断一个对象是否是空对象
一.写在前面 js如何判断一个对象是否是空对象,本文给出三个方法. 二.采用for-in-进行遍历 最常见的思路就是使用for....in...遍历属性,为真则为非空对象,为假则为空对象. <s ...
- js判断一个对象是否为空
判断一个对象是否为空的三种方法 1.通过JSON自带的.stringify方法来判断 2.最常见的思路,for...in...遍历属性,为真则为"非空数组":否则为"空数 ...
- JS类型判断、对象克隆、数组克隆
类型判断 我们先说一下JS的数据类型,我们一般说JS有六大数据类型(ES6以前)分别是: 基本数据类型 Number String Boolean null undefined 引用数据类型 obje ...
- html js 添加数据类型,js数据类型判断和转换
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 前言 无论笔试还是面试,总会问到数据类型和隐式转换.今天彻底整理一下这块的知识,希望对大家有帮助. 看到下面的题,是不是 ...
最新文章
- 顶尖985高校,异地布局!
- 关于Java为什么配置好环境变量但是不能在命令行cmd运行javac的问题
- boost::set_difference相关的测试程序
- linux 全局搜索文件_Linux笔记之文件搜索1
- uva 816(经典bfs例子)
- codeforces 1045 D. Interstellar battle
- JS_单个或多个文件上传_不支持单独修改
- 如何在 Apache Flink 中使用 Python API?
- 微商分销代理商城源码-代理等级和升级条件
- ***经验谈之SA权限***的感悟
- Python爬虫_数据存储
- P1030求先序排列
- python源码中的学习笔记_第9章_类与对象
- 【基础处理】基于matlab语音信号预处理【含Matlab源码 364期】
- RabbitMQ(二)
- 限制计算机用户使用指定软件,电脑使用时间限制软件(Time Boss)
- GD32IAP升级(BootLoader)
- 让摄像头脱离线的束缚:使用手机充当电脑摄像头
- HTML表格合并行和列
- 华为nova7se乐活版和华为畅享20se 哪个好