判断变量是否是数组Array

1. Array.isArray() 用于确定传递的值是否是一个 Array

	Array.isArray([1, 2, 3]);  // true
	Array.isArray({foo: 123}); // false

该方式是数组构造函数上的一个方法
ECMAScript 5.1中新增的 在IE9以下不兼容

2. 验证构造函数是否为数组

instanceof 判断的是数组时返回true,否则返回false。

var arr = [1,23,4];
var obj = {};
console.log(arr instanceof Array)//true;
console.log(obj instanceof Array)//false;
``
上面的方法其判断的是constructor属性,因为在js中每个对象都有constructor属性,这种也常用作判断未知对象的类型。
``js
console.log(ary.constructor == Array );//true
console.log(obj .constructor == Array)//false

从输出的效果来看,能准确的检测出数据类型是否是数组,我们都知道在js中原型是可以改变的,所以该方法是只在不改变其构造函数的前提下

var arr = [1,23,4];
var obj = {};
obj.__proto__ = arr.__proto__;
console.log(arr instanceof Array)//true;
console.log(obj instanceof Array)//true;
console.log(arr.constructor == Array);//true
console.log(obj.constructor == Array)//true

3. 验证原型

1.Object.getPrototypeOf() 方法返回指定对象的原型(内部[[Prototype]]属性的值)
判断变量的原型是否为Array.prototype
如果arr的原型为Array.prototype则为true

var arr = [1,23,4];
var obj = {};
console.log(Object.getPrototypeOf(arr) == Array.prototype); //true
console.log(Object.getPrototypeOf(obj) == Array.prototype);//false

2.isPrototypeOf() 方法用于测试一个对象是否存在于另一个对象的原型链上
判断Array.prototype是否在该对象的原型链中
如果Array.prototype在arr的原型链上则为true

console.log(Array.prototype.isPrototypeOf(arr));//true
console.log(Array.prototype.isPrototypeOf(obj));//false

但是该方法也是有缺点的和第二种缺点是一样的要是改变了其原型就会出现我们不想要的结果

4. 通用方法tostring()

Object.prototype.toString()
每个对象都有一个 toString() 方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。默认情况下,toString() 方法被每个 Object 对象继承。如果此方法在自定义对象中未被覆盖,toString() 返回 “[object type]”,其中 type 是对象的类型。以下代码说明了这一点:

var o = new Object();
o.toString(); // returns [object Object]

所以说这个方法是最稳妥的
但是tostring 在其他类型的原型中都被重写了所以在使用改方法的时候要改变tostring中的this的指向

var arr = [1,23,4];
var obj = {};
console.log(Object.prototype.toString.call(arr)=='[object Array]');//true
console.log(Object.prototype.toString.call(obj)=='[object Array]');//false

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值