JavaScript 原型總結二 一切皆對象之typeof

javascript中一個常用的運算符——typeof


“一切都是對象”這句話的重點在於如何去理解“對象”這個概念。
——當然,也不是所有的都是對象,值類型就不是對象。


JavaScript 原型總結二 一切皆對象之typeof

以上代碼列出了typeof輸出的集中類型標識,其中上面的四種(undefined, number, string, boolean)屬於簡單的值類型,不是對象。剩下的幾種情況——函數、數組、對象、null、new Number(10)都是對象。他們都是引用類型。

判斷一個變量是不是對象非常簡單。值類型的類型判斷用typeof,引用類型的類型判斷用instanceof。(這個方法也可以Object.prototype.toString.call("引用對象"))


JavaScript 原型總結二 一切皆對象之typeof

java或者C#中的對象都是new一個class出來的,而且裡面有字段、屬性、方法,規定的非常嚴格。但是javascript就比較隨意了——數組是對象,函數是對象,對象還是對象。對象裡面的一切都是屬性,只有屬性,沒有方法。那麼這樣方法如何表示呢?——方法也是一種屬性。因為它的屬性表示為鍵值對的形式。看下面代碼


JavaScript 原型總結二 一切皆對象之typeof

以上代碼中,obj是一個自定義的對象,其中a、b、c就是它的屬性,而且在c的屬性值還是一個對象,它又有name、year兩個屬性。


這個可能比較好理解,那麼函數和數組也可以這樣定義屬性嗎?——當然不行,但是它可以用另一種形式,總之函數/數組之流,只要是對象,它就是屬性的集合。


JavaScript 原型總結二 一切皆對象之typeof

而且,更加好玩的事,javascript中的對象可以任意的擴展屬性,沒有class的約束。這個大家應該都知道,就不再強調了。javascript與java/C#相比,首先最需要解釋的就是弱類型,因為弱類型是最基本的用法,而且最常用,就不打算做一節來講。其次要解釋的就是本文的內容——一切(引用類型)都是對象,對象是屬性的集合。最需要了解的就是對象的概念,和java/C#完全不一樣。所以,切記切記!


在typeof的輸出類型中,function和object都是對象為何卻要輸出兩種答案呢?都叫做object不行嗎?——當然不行。具體原因,且聽下回分解


分享到:


相關文章: