JavaScript之数组判断方法

instanceof运算符

var arr = [1, 2];
console.log(arr instanceof Array); // true

这段代码问的是“变量arr是否为Array对象的实例?”, 而arr确实是其实例,因此结果返回true。

封装myInstanceof函数

function myInstanceof(left, right) {
  var obj = right.prototype;
  left = left.__proto__;
    while (true) {
      if (left === null) {
        return false;
      }
      if (obj === left) {
        return true;
      }
    left = left.__proto__;
  }
}

关于instanceof更深层次的问题以及用法,请往JavaScript instanceof 运算符深入剖析


Array.isArray()

var arr = [1, 2];
console.log(Array.isArray(arr)); // true

ES5方法,IE8及以前浏览器版本不支持


constructor

每创建一个函数,就会同时创建它的prototype对象, 这个对象也会自动获得constructor属性,当这个函数作为

构造函数创建一个实例,这个实例访问constructor属性,实际上是访问它原型上的constructor属性。

function Father() {
  this.name = 'kuang'
}
console.log(Father.prototype.constructor);
// ƒ Father() {this.name = 'kuang'}

var instance = new Father();
console.log(instance.constructor);
// ƒ Father() {this.name = 'kuang'}

判断数组

var arr = [1, 2];
console.log(arr.constructor === Array); // true

Object.prototype.toString.call()

var arr = [1, 2];
console.log(Object.prototype.toString.call(arr) === '[object Array]'); // true

自封装一个数组判断函数myIsArray()

Array.prototype.myIsArray = function (object) {
  return object && 
         typeof object === 'object' &&
         typeof object.length === 'number' &&
         typeof object.splice === 'function' &&
         // 判断length 属性是否是可枚举的 对于数组将得到false 对象默认为true
         !(object.propertyIsEnumerable('length')); 
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。