首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

JavaScript 中 typeof 數組返回 "object" 的深層原因

     編輯:程式設計疑難解答

現象重現

var mycars = new Array("Saab", "Volvo", "BMW");
console.info(typeof mycars); // 輸出 "object"
console.info(mycars);        // 輸出 ["Saab", "Volvo", "BMW"]

核心解釋

根據 ECMAScript 標準,JavaScript 中所有的 引用類型(包括 Array、Object、Function、Date、RegExp 等)都是 Object 的實例。因此 typeof 操作符對任何引用類型值(除 null 外)均返回 "object"。

數組本質上是一種特殊的對象,其鍵為數字索引,且擁有 length 屬性和特定方法(如 push、pop)。但從類型系統角度看,它屬於對象範疇。

正確判斷數組的方法

  1. Array.isArray()(ES5+ 推薦)
    Array.isArray(mycars) // true
  2. instanceof 操作符
    mycars instanceof Array // true
  3. Object.prototype.toString.call()
    Object.prototype.toString.call(mycars) === "[object Array]" // true
  4. constructor 屬性
    mycars.constructor === Array // true

避坑指南

  • 不要使用 typeof arr === "array" —— 永遠不會成立。
  • 跨 iframe/frame 傳遞數組時,instanceof 可能失效,優先用 Array.isArray()。
  • null 是特例:typeof null === "object",但它不是對象實例。

理解這一機制,有助於編寫更健壯的類型檢查邏輯,避免在條件判斷中踩坑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved