[JavaScriptWeird]No.42 所有東西都是物件或純值

前言

上一篇了解物件原型與原型鏈,接著我們透過一些簡單的驗證可以了解到 JavaScript 的所有東西都是物件或純值, JavaScript 的所有東西像是數值、字串、布林、函式、陣列、一般物件這些都有原型,除了 JavaScript 的基本物件 (base object)。

範例

首先建立一些東西方便我們做驗證:

1
2
3
var a = {};  
var b = function () {};
var c = \[\];

分別建立物件、函式、陣列,透過這三個東西來觀察各自的原型,接著使用 chrome 瀏覽器來觀察:

  • a 的原型是 JavaScript 的基本物件 (base object),基本物件在原型鏈上是相當底層的,因為所有東西的底層都會是基本物件或純值。 a 的基本物件下掛載了許多的屬性以及方法,還記得前一篇提到的,物件上的屬性以及方法是如何透過原型鏈取得的嗎?這也是為什麼我們沒有寫那些方法卻可以使用,這是因為 JavaScript 已經幫我們寫好在原型上了。
  • b 的原型是函式,這是所有函式的原型,可以在裡面找到先前提到的 call、bind、apply 方法,這也是為什麼之前說這些方法所有的函式都可以使用的緣故。
  • c 的原型是個空陣列,也可以看到裡面掛載了許多的方法,像是 filterpush 等等,意思就是我們建立的所有陣列都可以使用這裡面的方法,因為這些方法被設定在陣列的原型上。

原型的原型

透過上面的小測試我們知道各自的原型並不直接是物件,但如果原型的原型呢?

  • 因為 a 第一層的原型已經是最小單位(基本物件)了,所以回傳 null
  • b 的第一層原型則是函式,第二層原型則是回傳基本物件。
  • 同樣地, c 也是回傳基本物件。

這也驗證了開頭的標題,所有東西的原型都是物件或純值。

0%