一、判斷值是否是物件:
- 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 代表為陣列