JavaScript中如何判断一个对象是不是数组

/**仅记录自己的学习历程,为以后的自己留一个参考**/

首先typeof只能判断原始类型和对象,返回结果是一个说明运算数类型的字符串。如:"number","string","boolean","object","function","undefined"(可用于判断变量是否存在)。 typeof 的能力有限,其对于Array、Date、RegExp类型返回的都是"object"


1.Array.isArray([ ])

Array.isArray()用于确定传递的值是否是一个 Array,如果对象是 Array,则为true; 否则为false。鲜为人知的事实:其实Array.prototype也是一个数组。但是Array.isArray()是ES5新特性,许多老式浏览器可能并不支持,所以不是一个很保险的方法。

> Array.isArray(Array.prototype)

true


2.Object.prototype.toString.call([ ])

Object对象的toString()方法会返回所创建对象的内部类名。在这里,toString()方法必须要来自于Object构造器的prototype属性。直接调用Array的toString()方法是不行的,因为在Array对象中,这个方法已经出于其他目的被重写了。

> Object.prototype.toString.call({});
"[Object Object]"

> Object.prototype.toString,call([]);
"[Object Array]"

> (function (){
    return Object.prototype.toString.call(arguments);
    })();
"[Object Arguments]"


3.[ ] instanceof Array

instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上,即object是否是该构造函数的一个实例。该方法的本意和方法4类似。

语法: object  instanceof  constuctor


4.[ ].__proto__ == Array.prototype


5.[ ].constructor

调用该对象的构造器方法,该方法会返回该对象的构造器函数,由于 [ ] 实例中不存在constructor属性,JS会沿着原型链向上查找,会在Array.prototype中找到constructor属性,调用该方法,则返回Array()构造函数

> [ ].constructor

function Array() { [native code] }


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值