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相关推荐

  1. js如何判断一个对象是不是Array?

    在开发中,我们经常需要判断某个对象是否为数组类型,在Js中检测对象类型的常见方法都有哪些呢? typeof 操作符 对于Function, String, Number ,Undefined 等几种类 ...

  2. JS 中判断一个对象是否为数组对象?

    在面向对象中 判断一个对象中 判断一个对象是否为数组 1 可以查找它的原型 (__proto__) 是否为数组对象的原型对象 var arr1 = [1,2,3];console.log(arr1._ ...

  3. JS如何判断一个对象是否为空、是否有某个属性

    一.JS判断一个对象是否为空 方法一: let obj1 = {} let obj2 = {a:1} function empty(obj){for (let key in obj){return f ...

  4. [JS] 如何判断一个对象是否为空

    js判断空对象的几种方法 一.将对象转为字符串比较 let a = {} console.log(JSON.stringify(a) === '{}') //true 二.for-in循环 funct ...

  5. js中判断一个对象是否存在

    一.Boolean()方法 用Boolean()方法可以将Js中的任意数据类型转为布尔值: 二.用于判断xx是否存在 js一般会自动执行Boolean()方法,我们可以借此判断某个对象在js当前的执行 ...

  6. js判断一个对象是否是空对象

    一.写在前面 js如何判断一个对象是否是空对象,本文给出三个方法. 二.采用for-in-进行遍历 最常见的思路就是使用for....in...遍历属性,为真则为非空对象,为假则为空对象. <s ...

  7. js判断一个对象是否为空

    判断一个对象是否为空的三种方法 1.通过JSON自带的.stringify方法来判断 2.最常见的思路,for...in...遍历属性,为真则为"非空数组":否则为"空数 ...

  8. JS类型判断、对象克隆、数组克隆

    类型判断 我们先说一下JS的数据类型,我们一般说JS有六大数据类型(ES6以前)分别是: 基本数据类型 Number String Boolean null undefined 引用数据类型 obje ...

  9. html js 添加数据类型,js数据类型判断和转换

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 前言 无论笔试还是面试,总会问到数据类型和隐式转换.今天彻底整理一下这块的知识,希望对大家有帮助. 看到下面的题,是不是 ...

最新文章

  1. 顶尖985高校,异地布局!
  2. 关于Java为什么配置好环境变量但是不能在命令行cmd运行javac的问题
  3. boost::set_difference相关的测试程序
  4. linux 全局搜索文件_Linux笔记之文件搜索1
  5. uva 816(经典bfs例子)
  6. codeforces 1045 D. Interstellar battle
  7. JS_单个或多个文件上传_不支持单独修改
  8. 如何在 Apache Flink 中使用 Python API?
  9. 微商分销代理商城源码-代理等级和升级条件
  10. ***经验谈之SA权限***的感悟
  11. Python爬虫_数据存储
  12. P1030求先序排列
  13. python源码中的学习笔记_第9章_类与对象
  14. 【基础处理】基于matlab语音信号预处理【含Matlab源码 364期】
  15. RabbitMQ(二)
  16. 限制计算机用户使用指定软件,电脑使用时间限制软件(Time Boss)
  17. GD32IAP升级(BootLoader)
  18. 让摄像头脱离线的束缚:使用手机充当电脑摄像头
  19. HTML表格合并行和列
  20. 华为nova7se乐活版和华为畅享20se 哪个好

热门文章

  1. 离职交接文档_关于工作交接
  2. 三招助你轻松搞定超Diao氛围
  3. 「技美之路」图形 1.2.1 向量基础
  4. 揭秘《英雄联盟》客户端更新运行自动化测试
  5. AMD RX 8000系列将采用3纳米和5纳米工艺
  6. MySQL 数据格式化
  7. vue脚手架中使用axios
  8. 关于编辑器对input标签报错提示“表单输入没有相关label”的问题
  9. 【转】理解JavaScript中的事件处理
  10. asp.net中关于静态页面生成的代码实例