1. instanceof
MDN上的解释为:instanceof 运算符用于检测 constructor.prototype 是否存在于参数 object 的原型链上。
语法为: object (某个实例对象) instanceof constructor(某个构造函数)
let arr = [1, 3];
console.log(arr instanceof Array); // true
// 值得注意的是:Array是Object的子类,下面也会输出true
console.log(arr instanceof Object); // true
2. constructor
w3school上的解释为:constructor 属性返回对创建此对象的构造函数。
语法为:object.constructor
let arr = [1, 3];
console.log(arr.constructor); // ƒ Array() { [native code] } 指向Array
console.log(arr.constructor == Array); // true
3. proto 和 prototype
说明一下,对象独有 proto 属性,函数独有 prototype 属性,生成对象时,对象的 proto 属性指向函数的 prototype 属性。
这是通过原型链来做判断。
let arr = [1, 3];
console.log(arr.__proto__ === Array.prototype); // true
4. toString()
MDN上的解释为:每个对象都能通过 Object.prototype.toString() 来检测对象的类型,需要以 Function.prototype.call() 或者 Function.prototype.apply() 的形式来调用,传递要检查的对象作为第一个参数,称为 thisArg。
let arr = [1, 3];
console.log(Object.prototype.toString.call(arr)); // "[object Array]"
console.log(Object.prototype.toString.call(arr) === "[object Array]"); // true
console.log(Object.prototype.toString.apply(arr) === "[object Array]"); // true
5.isPrototypeOf()
这里也是通过原型链来做判断,查看 Array 是否在 arr 的原型链上。
let arr = [1, 3];
console.log(Array.prototype.isPrototypeOf(arr)); // true
6. isArray()
MDN上的解释为:Array.isArray() 用于确定传递的值是否是一个数组。
这是es6提供的方法,可以看作为封装好的第四种方法 toString()。
感谢阅读,文章仅作为学习笔记记录。