在 JavaScript 中檢查值是否為物件
    
    
            Hiten Kanwar
    2023年10月12日
    
    JavaScript
    JavaScript Object
    
- 
          
            在 JavaScript 中使用 instanceof函式檢查值是否為物件
- 
          
            在 JavaScript 中使用 typeof()函式檢查值是否為物件
- 在 JavaScript 中使用使用者定義的函式檢查值是否為物件
- 
          
            在 JavaScript 中使用 getPrototypeOf()方法檢查值是否為物件
 
在 JavaScript 中,定義的每個值要麼是物件,要麼是基元。任何不是物件且沒有任何方法的值都稱為基元。任何不是原始的都是一個物件。
在本教程中,我們將檢查一個值是否是一個物件。
在 JavaScript 中使用 instanceof 函式檢查值是否為物件
我們將在 instanceof 方法的幫助下檢查該值,該方法在執行時返回物件的型別。
在下面的示例中,如果值是物件型別,該函式將返回 true。
const test = {};
function isObject(val) {
  return val instanceof Object;
}
console.log(isObject(test));
輸出:
true
但這種方法不適用於所有情況。isObject(Object.prototype) 和 isObject(Object.create(null)) 將返回 False。
在 JavaScript 中使用 typeof() 函式檢查值是否為物件
我們可以使用 typeof() 函式檢查物件的型別。
例如,
const test = {};
function isObject(val) {
  return (typeof val === 'object');
}
console.log(isObject(test));
輸出:
true
此方法也不適用於所有測試用例。它將為空測試用例返回假陽性,為函式返回假陰性。isObject(Object) 也將返回 false。
我們還可以使用此函式定義另一個函式來解決上述限制。
請參考下面的程式碼。
const test = {};
function t() {};
function isObject(val) {
  if (val === null) {
    return false;
  }
  return ((typeof val === 'function') || (typeof val === 'object'));
}
console.log(isObject(test));
console.log(isObject(t));
輸出:
true 
true
如果值為 NULL,則上述示例中的函式返回 False。如果該值是 function 型別或 object 型別,則返回 true。否則,它返回 False。
在 JavaScript 中使用使用者定義的函式檢查值是否為物件
我們可以定義更多這樣的函式來完成基於物件的建構函式和類的工作。
例如,
const test = {};
function isObject(obj) {
  return obj === Object(obj);
}
function isObject2(obj) {
  return obj.constructor.toString().indexOf('Object') > -1;
}
console.log(isObject(test));
console.log(isObject2(test));
輸出:
true
true
在上面的例子中,我們建立了兩個函式來檢查給定的值是否是一個物件。
在 JavaScript 中使用 getPrototypeOf() 方法檢查值是否為物件
如果 getPrototypeOf 方法的引數不是物件,它將丟擲異常。我們可以用它來檢查給定值的類的型別。
例如,
const test = {};
const object1 = Object.create(test);
console.log(Object.getPrototypeOf(object1) === test);
輸出:
true
        Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe