一、判断变量是否是数组?
1、isArray 方法
isArray() 方法用于判断一个对象是否为数组。如果对象是数组返回 true,否则返回 false。
Array.isArray(arr); // true
2、对象原型
通过原型链判断是否具有和数组同一原型链的顶端。
arr._proto_ === Array.prototype; // true
3、instanceof 运算符
用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上
arr instanceof Array; // true
4、Object.prototype.toString.call()
所有原始数据类型都能通过该方法判断,具有通用性
Object.prototype.toString.call(arr); // "[object Array]"
Object.prototype.toString.call(2); // "[object Number]"
Object.prototype.toString.call(""); // "[object String]"
Object.prototype.toString.call(true); // "[object Boolean]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
Object.prototype.toString.call(Math); // "[object Math]"
Object.prototype.toString.call({}); // "[object Object]"
Object.prototype.toString.call([]); // "[object Array]"
Object.prototype.toString.call(function () {}); // "[object Function]"
5、利用构造函数来判断他的原型是否为Array, 用法: 变量.constructor === 变量类型
let arr = [1, 2, 3]
console.log(arr.constructor === Array)
6、通过 Object.getPrototypeOf()来判断是否为数组类型
let arr = [1, 2, 3]
console.log(Object.getPrototypeOf(arr) === Array.prototype)
7、通过 isPrototypeOf() 方法来判断是否为数组类型
let arr = [1, 2, 3]
console.log(Array.prototype.isPrototypeOf(arr))
二、判断变量是否是对象
1、通过instanceof
let obj = {}
obj instanceof Object
2、通过Object,prototype.toString.call()
Object.prototype.toString.call({}); // "[object Object]"
3、 通过constructor
let obj = {}
obj.constructor === Object
4、通过 Object.getPrototypeOf()来判断是否为对象类型
let obj = {}
console.log(Object.getPrototypeOf(obj) === Object.prototype)
5、通过 isPrototypeOf() 方法来判断是否为对象类型
let obj = {}
console.log(Object.prototype.isPrototypeOf(obj))