当一个愚蠢的问题出现时,我正在阅读Three.js代码:下面的代码之间有什么区别吗?
frameHeight = frameHeight !== undefined ? frameHeight : 24;
和
frameHeight = frameHeight || 24;
(frameHeight是函数的参数)
由于
答案 0 :(得分:9)
是的,他们是不同的。
frameHeight = frameHeight || 24;
这会将frameHeight
强制转换为布尔值。如果是0
,''
,false
,null
,undefined
或NaN
,则为false,frameHeight
将默认为24。
frameHeight = frameHeight !== undefined ? frameHeight : 24;
这将明确检查frameHeight
是否不是undefined
,undefined
只会将其默认为24
。
答案 1 :(得分:2)
frameHeight = frameHeight || 24;
^也会进行空检查。还会检查0,false,空字符串('')NaN和undefined
frameHeight = frameHeight !== undefined ? frameHeight : 24;
^只检查未定义。
答案 2 :(得分:2)
是的,存在差异,根据具体情况,差异可能很大。
frameHeight = frameHeight || 24
如果frameHeight最初为任何虚假值,例如24
,""
,0
,null
,undefined
,会将NaN
分配给框架或false
。
鉴于:
frameHeight = frameHeight !== undefined ? frameheight : 24
如果初始值恰好为24
,将仅为其分配undefined
。
因此,在这个特定函数中可能有意义,第二种方法允许你为0
传递frameHeight
来设置零高度,但是第一种方法不会,因为它会覆盖那个0
至24
。
答案 3 :(得分:0)
frameHeight = frameHeight || 24;
frameHeight
= 0适用于frameHeight
= null
失败
frameHeight = frameHeight !== undefined ? frameHeight : 24;
frameHeight
= null无效frameHeight
= 0