一、判断值是否是对象:
- toString 方法【常用】
Object.prototype.toString.call(val)==='[object Object]' // true 表示为对象 // 这里使用 call 方法改变作用域
- constructor 方式
val?.constructor===Object // true 代表为对象
- typeof 与 instanceof 方式:typeof 和 instanceof 并不能完全判断一个值为对象
- typeof 的取值:
- undefined:值未定义
- boolean:值为布尔值
- string:值是字符串
- number:值是数值
- object:值是对象(包括数组)或null
- function:值是函数
- symbol:值是 Symbol
- instanceof 对于数组和对象都返回 true,如果是 null 返回 false
- [] instanceof Object:true
- new Object instanceof Object:true
- null instanceof Object:false
- typeof 的取值:
- __proto__方式 【不推荐】
val.__proto__===Object.prototype // true 代表为对象
- Object.getPrototypeOf 方式
Object.getPrototypeof(val)===Object.prototype // true 代表为对象
二、判断值是否为数组:
- toString 方式
Object.prototype.toString.call(val)==='[object Array]' // true 代表为数组
- Array.isArray方法【推荐】
Array.isArray(val) // true 代表为数组
- instanceof 方式
val instanceof Array // true 代表为数组
- constructor 方式
val?.constructor===Array // true 代表为数组
- __proto__方式 【不推荐】
val.__proto__===Array.prototype // true 代表为数组
- Object.getPrototypeOf 方式
Object.getPrototypeof(val)===Array.prototype // true 代表为数组
- isPrototypeOf 方式
Array.prototype.isPrototypeOf(val) // true 代表为数组