在他雄辯的Javascript,Haverbeke聲稱(第16頁)。Javascript中的函數是對象還是類型?
「在JavaScript系統中,大多數這些數據都被整齊地分成東西叫做值的每個值都有一個類型,它決定了樣它有六種基本類型的值:數字,字符串,布爾值,對象,函數和未定義的值。「
但克羅克福德在的Javascript:好的部分說:
「簡單類型的JavaScript是數字,字符串,布爾值(true和false),null和未定義的所有其他值都是對象數字,字符串和布爾類似於對象,因爲它們有方法,但是它們是不可變的,JavaScript中的對象是可變鍵控集合,在JavaScript中,數組是對象,函數是對象,正則表達式是對象,當然, ,對象是對象。「
現在,至少在V8我得到這個:
> typeof function(){};
'function'
> typeof {};
'object'
如果對象是一個類型,函數是一個對象,如果功能和對象是兩種類型的,我不明白。我想我錯過了原始類型和其他類型(複合類型?)之間的區別。
JS中的一切都是一個對象。這就像說一個正方形是一個矩形,但是一個矩形不是正方形。 – 2013-03-14 02:11:22
@德里克:不是一切。 JS具有原語*(非對象)*,並且其中一些具有對象「包裝器」,但不是全部。 – 2013-03-14 02:19:09
把函數想象成一種特殊類型的對象是最容易的,就像數組是一種特殊類型的對象一樣。他們具有對象的能力,但也有其他能力,使他們成爲不同類型的對象。 – jfriend00 2013-03-14 02:25:16