数组判断

常用方法

instanceof

当原型链断裂时,无法正确判断

arr instanceof Array; // true
arr.__proto__ = null;
arr instanceof Array; // false

constructors

同上,当原型链断裂时,无法正确判断

arr.constructor == Array; // true
arr.__proto__ = null;
arr.constructor == Array; // false

isArray

es6 新增方法

Array.isArray(arr);

Object.prototype.toString.call() === '[object Array]'

此方法被用于 isArray 方法的 polyfill

Object.prototype.toString.call(arr) === '[object Array]';

instanceof 与 constructor 区别

  • instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链
  • constructor 的作用是返回实例的构造函数,即返回创建此对象的函数的引用
function Person() {}
Person.prototype = {
    name: 'Jim',
    age: '21',
};
var person = new Person();

未修改原型时,两者都返回 true,修改原型后,constructor 返回 false 因为 constructorprototype 里的一个属性,当直接将原型更改为字面量对象时,constructor 的指向就改变了

person instanceof Person; // true
person.constructor === Person; // false
Last Updated:
Contributors: zhangfei