2013-05-10 30 views
30

在JavaScript函數頂部聲明變量時,最好將它們設置爲null,還是保留爲'undefined'?另一種方法要問,在什麼情況下要求每個選項在下面?設置JavaScript變量= null,還是保留undefined?

選項A:

var a = null, 
    b = null; 

選項B:

var a, 
    b; 
+2

我會選擇'b' – 2013-05-10 03:39:15

+3

@ Mr.Alien - 同意。沒有理由使用'= null'版本,除非事實上這些變量值是'null'而不是'undefined'。 – 2013-05-10 03:47:15

+0

實際上,'var a,b;'可能不會總是讓它保留'undefined' *。在以前的IE版本中,您需要將該代碼更改爲'var a = undefined,b = undefined;',否則代碼在嘗試訪問時會產生錯誤(即使您只是簡單地檢查if它具有一些價值,比如'if(a && b)')。在這種情況下,未設置的變量不同於未定義的變量。 – falsarella 2015-07-08 21:32:59

回答

13

我宣佈他們爲未定義時,我因爲他們是不確定的畢竟不分配一個值。

+5

那麼是否需要'分配'未定義,因爲正如你所說,它們到底是不確定的? – VivekDev 2017-01-22 10:00:41

+1

如前所述,沒有必要聲明未定義的,但如果你確實聲明瞭未定義的,那麼當測試該值時,你將不知道是否故意設置它或者它是否從未真正設置過。這就是爲什麼在沒有價值的情況下,我更喜歡空值。 – 2018-01-24 05:03:39

0

簡短的回答是,它沒有因爲它通過堆棧運行的方式而有所作爲。但是,在某些情況下,處理範圍之外的變量會更好。

+4

對不起,但這個答案根本沒有任何意義。它與任何堆棧無關,與範圍無關。一個版本將變量值設置爲「null」,另一個版本將它們設置爲「undefined」。這是* only *的區別;與你提到的任何東西都沒有關係。 – 2013-05-10 03:46:03

+0

@MichaelGeary是的,但它聽起來很聰明 – 2015-08-26 13:25:26

1

您需要設置(或沒有)唯一的一次是,如果你需要明確檢查變量a正好設置爲nullundefined

if(a === null) { 

} 

...是不一樣的:

if(a === undefined) { 

} 

這就是說,a == null && a == undefined將返回true

Fiddle

+0

在這種情況下檢查null是不好的。因爲它違反了JavaScript中的「避免null比較」的最佳做法。您應該僅針對DOM對象進行比較(http://my.safaribooksonline.com/book/programming/javascript/9781449328092/iidot-programming-practices/id2779483) – 2013-05-10 04:04:41

+0

我不同意;我們所要做的就是看一個變量是否實際爲'null'或'undefined' - 這是完全有效的檢查。我_do同意,在你引用的例子中,檢查'null'是個壞主意,但這只是一種情況:) – jterry 2013-05-10 04:09:04

30

這取決於上下文。

  • 「undefined」表示該值不存在。 typeof返回「undefined」

  • 「null」表示該值存在一個空值。當您使用typeof來測試「null」時,您會看到它是一個對象。其他情況下,當您將「空」值序列化爲後端服務器(如asp.net mvc)時,服務器將收到「null」,但是當您序列化爲「未定義」時,服務器不太可能接收到值。

9

通常,我使用null作爲值,我知道可以有一個「null」狀態;例如

if(jane.isManager == false){ 
    jane.employees = null 
} 

否則,如果它是一個變量或尚未加定義的函數(因此,是不是現在「可用」),但應該是建立以後,我一般不予以定義。

-12

您可以使用'';在JavaScript

聲明NULL變量
+8

空字符串和'null'是非常不同的東西。 – 2015-01-15 07:24:37

1

一般都講我定義的空時表示人類設置的值和未定義表示沒有設置已經發生。

1

我通常將它設置爲我希望從函數返回的任何東西。

如果一個字符串,比我將它設置爲一個空字符串='',相同的對象= {}和數組= =,整數= 0。

使用此方法可以節省我檢查null/undefined的需求。無論結果如何,我的函數都會知道如何處理字符串/數組/對象。

相關問題