object 和 Object 的區別


JavaScript中object和Object有什么區別,為什么用typeof檢測對象,返回object,而用instanceof 必須要接Object呢?

有兩個問題需要明白:

  • 一個是運算符new的作用機制,

  • 一個是function關鍵字和Funtion內置對象之間的區別。

new

new運算符的作用是創建一個對象實例。這個對象可以是用戶自定義的,也可以是帶構造函數的一些系統自帶的對象。如果 new 表達式之后的構造函數返回的不是JavaScript內置的引用對象(Object,String等)new會創建一個匿名對象並返回;如果是內置引用對象或者原始類型就會覆蓋匿名對象。(無 return 時其實為 return 原始類型 undefined)。new運算符詳細介紹

function和Function

ECMAScript 的Function實際上就是一個功能完整的對象。而function這個關鍵字是用來創建所有對象的構造函數或者普通函數要用的關鍵字ECMAScript如何定義類和對象,提問者var a=new function(){}實際上是用構造函數的方法創建了一個匿名對象的實例,而並不是系統內置對象Function的實例,所以a instanceof Function返回false,typeof返回"object"。

直接定義a為function時,返回function

  function a (){}
  const b =new function(){}
  console.log(typeof a === 'function') //true
  console.log(a instanceof Function)  //true

  console.log(typeof b === 'function')  //false
  console.log(b instanceof Function)    //false

typeof 和 instanceof 這兩個功能就是完全不一樣的運算符。typeof 是為了檢查數據類型,instanceof是為了看一個變量是否是某個對象的實例。

typeof 的目的,是檢查數據類型,而它的輸出,非常確定的只有如下幾個:

  • undefined
  • object
  • boolean
  • number
  • string
  • function
  • symbol(新)

typeof 返回的結果,是一個字符串。只要檢查的變量是一個對象,或者是 Null,那它就會返回 object,這當然不夠精確,所以有了 instanceof。

因為不存在 object 這個對象,所以會提示你 object is not defined 。而 Object 是 JavaScript 中一個重要的對象,其它對象都是基於它的,包括你創建的函數。你創建 a 的時候,使用的是 new 關鍵字,這相當於是一個 Function 引用類型的實例。所以 a instanceof Object 就會是 true。

區別是Object 是一種對象類型, "object"是一個字符串, 你不定義的話沒有意義。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。