2012-08-15 109 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