js:判斷物件或陣列

yhstsy發表於2024-03-07

一、判斷值是否是物件:

  1. toString 方法【常用】
    Object.prototype.toString.call(val)==='[object Object]' 
    // true 表示為物件
    // 這裡使用 call 方法改變作用域

  2. constructor 方式
    val?.constructor===Object 
    // true 代表為物件

  3. typeof 與 instanceof 方式:typeof 和 instanceof 並不能完全判斷一個值為物件
    1.   typeof 的取值:
      • undefined:值未定義
      • boolean:值為布林值
      • string:值是字串
      • number:值是數值
      • object:值是物件(包括陣列)或null
      • function:值是函式
      • symbol:值是 Symbol
    2.   instanceof 對於陣列和物件都返回 true,如果是 null 返回 false
      • [] instanceof Object:true
      • new Object instanceof Object:true
      • null instanceof Object:false
  4. __proto__方式 【不推薦】
    val.__proto__===Object.prototype 
    // true 代表為物件

  5. Object.getPrototypeOf 方式
    Object.getPrototypeof(val)===Object.prototype
    // true 代表為物件

二、判斷值是否為陣列:

  1. toString 方式
    Object.prototype.toString.call(val)==='[object Array]'
    // true 代表為陣列

  2. Array.isArray方法【推薦】
    Array.isArray(val)
    // true 代表為陣列

  3. instanceof 方式
    val instanceof Array
    // true 代表為陣列

  4. constructor 方式
    val?.constructor===Array
    // true 代表為陣列

  5. __proto__方式 【不推薦】
    val.__proto__===Array.prototype
    // true 代表為陣列

  6. Object.getPrototypeOf 方式
    Object.getPrototypeof(val)===Array.prototype
    // true 代表為陣列

  7. isPrototypeOf 方式
    Array.prototype.isPrototypeOf(val)
    // true 代表為陣列

相關文章