2012-08-15 159 views
4

當一個愚蠢的問題出現時,我正在閱讀Three.js代碼:下面的代碼是否有區別?Javascript默認參數

frameHeight = frameHeight !== undefined ? frameHeight : 24; 

frameHeight = frameHeight || 24; 

(frameHeight是函數的參數)

感謝

+1

不是一個JavaScript專家,但我相信,第一隻返回24如果'frameHeight'爲'undefined',如果frameHeight具有任何「falsey」值,如'null',''''等等,第二個將返回24。 – sellmeadog 2012-08-15 17:32:47

+0

它們不同,但是if(frameHeight = ==未定義)frameHeigh t = 24;'IS是等價的,但它更具可讀性並且性能更好,因爲它的值只會在需要時纔會改變 – ajax333221 2012-08-15 17:48:57

回答

9

是的,它們是不同的。

frameHeight = frameHeight || 24; 

這將強制frameHeight爲布爾值。如果是0''falsenullundefined,或NaN這將是假的,frameHeight將被默認爲24

frameHeight = frameHeight !== undefined ? frameHeight : 24; 

這將明確檢查frameHeightundefined只爲undefined將其默認它到24

2
frameHeight = frameHeight || 24; 

^會做一個空檢查爲好。也將做一個檢查0,假,空字符串('')NaN和undefined

frameHeight = frameHeight !== undefined ? frameHeight : 24; 

^只是檢查未定義。

2

是的,存在差異,根據具體情況,差異可能很大。

frameHeight = frameHeight || 24 

將分配24幀如果frameHeight最初ANY falsey值如""0nullundefinedNaNfalse

鑑於:

frameHeight = frameHeight !== undefined ? frameheight : 24 

會如果初始值是完全undefined只分配它24

所以,在這個特殊的功能可能意義,第二個方法可以讓你通過0frameHeight設置零高度,但第一種方法會不會因爲這將覆蓋024

0
frameHeight = frameHeight || 24; 

失敗的frameHeight = 0作品frameHeight = NULL

frameHeight = frameHeight !== undefined ? frameHeight : 24; 

失敗的frameHeight = NULL作品frameHeight = 0

+0

它將在null和0的情況下返回24 for frameHeight = frameHeight || 24. – 2012-08-15 17:35:14

+0

在某種意義上失敗 - 在第一種情況下,如果值爲0,它將被重置爲24,但0有效。如果value爲null,它將被重置爲24,因爲null是無效值。因此對於null的0作品失敗。 – Diode 2012-08-15 17:43:39

+0

在第二種情況下,如果值爲0,則不會重置,因爲0有效。如果value爲null,則不會重置,但null是無效值。因此,適用於0,失敗爲空。 – Diode 2012-08-15 17:44:17