数组判断
常用方法
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 因为 constructor 是 prototype 里的一个属性,当直接将原型更改为字面量对象时,constructor 的指向就改变了
person instanceof Person; // true
person.constructor === Person; // false