2010-09-07 39 views
10

可能重複:
Null object in javascript在JavaScript中是否爲null對象?

嗨,我讀過有關this thread在JavaScript空,但我很困惑的null的身份了。

由於已知typeof(null)由於the language design error而評估爲object,並且ECMA指出null爲The Null Type

8.2 The Null Type 
    The Null type has exactly one value, called null. 

那麼爲什麼人們總是說null是一個對象?

有人說null是一個單例對象。大家如何看待JavaScript中的null?

+1

@ karim79是的,我已經讀過這個帖子,並把我的問題作爲一些答案的評論,但沒有得到答覆,所以我在這裏提出了它。謝謝 – c4il 2010-09-07 21:41:49

+1

你用報價回答了你自己。 null(表示自己的值 - 讀作:「其他任何東西」 - 以及null === null,全爲null)是Null Type的唯一佔有者。正如你所指出的那樣,實際的「對象」是可以爭論的,但是null的特徵使它成爲一個最基本的靜音點。 – 2010-09-07 21:44:16

+0

您的鏈接「語言設計錯誤」引用道格拉斯克羅克福德的一篇文檔 - 我(個人)不會建議您逐字逐句說出所有內容。 – Reinsbrain 2014-11-18 18:19:46

回答

10

Null是沒有對象。未定義表示尚未分配,而空表示它已被分配爲空。

Null並不是一個單獨的對象,因爲解引用它會導致錯誤; for (var x in null)會給你一個錯誤。回想指針的日子; null是指針在沒有指向對象時的值。

+1

'for(var x in null);'不會拋出許多瀏覽器,儘管它應該至少按照[第3版](http://bclary.com/2004/11/07/#a- 12.6.4)ECMAScript('ToObject'操作在值爲'null'或'undefined'時拋出)。但是現在[ECMAScript 5](http://www.ecma262-5.com/ELS5_HTML.htm#Section_12.6.4)已經改變了,如果表達式是'null'或者'undefined',那麼語句簡單地結束正常聲明完成)。 – CMS 2010-09-07 22:14:49

+1

不錯,HTML格式的ECMA規範。我一直在尋找那個! :) – c4il 2010-09-07 22:26:58

7

不,null是少數基本類型之一(其他是數字,字符串,布爾值和未定義的)。其他的東西都是一個對象,包括函數,數組和正則表達式。數字,字符串和布爾值通常被稱爲「類對象」,因爲它們有方法,但是它們是不可變的。 另一方面,對象是可變的。

+0

可變性與作爲對象無關。請參閱EcmaScript 5中的Object.freeze,它允許創建不可變對象。 EcmaScript 3中的本地對象也是對象,可以是不可變的。空不是一個對象,因爲它可以響應沒有消息 - 沒有屬性或方法。這就是爲什麼(空instanceof類型)對所有類型都是false的原因。 – 2010-09-07 22:13:27

+1

@mikesamuel:從我的回答中刪除了「違規」部分:) – 2010-09-07 22:18:48

+0

*類似對象*可能是一個錯誤的術語,用於描述在試圖用作對象時如何暫時裝箱原語。 – alex 2016-01-27 10:49:36

1

null不能被視爲一個對象,因爲它不能具有屬性。它是代表原語的關鍵字,如truefalse

> true instanceof Object 
false 
> null instanceof Object 
false 
相關問題