我正在阅读Three.js代码时出现了一个愚蠢的问题:下面的代码之间有什么区别吗?
frameHeight = frameHeight !== undefined ? frameHeight : 24;
和
frameHeight = frameHeight || 24;
(frameHeight是函数的一个参数)
谢谢
是的,它们是不同的。
frameHeight = frameHeight || 24;
这会强制frameHeight
为布尔值。如果它是 0
、 ''
、 false
、 null
、undefined
或 NaN
它将是假的,frameHeight
将默认为 24。
frameHeight = frameHeight !== undefined ? frameHeight : 24;
这将显式检查frameHeight
是否未undefined
,并且只有对于undefined
,它才会默认为24
。
frameHeight = frameHeight || 24;
^ 也会做一个空检查。还将检查 0、假、空字符串 ('') NaN 和未定义
frameHeight = frameHeight !== undefined ? frameHeight : 24;
^ 只会检查未定义。
是的,存在差异,并且根据情况,差异可能很大。
frameHeight = frameHeight || 24
如果 frameHeight 最初是任何假值,例如 ""
、0
、null
、undefined
、NaN
或 false
,则将24
分配给帧。
而:
frameHeight = frameHeight !== undefined ? frameheight : 24
只有在初始值正好undefined
时24
才会分配它。
特定函数中可能具有重要意义,第二种方法将允许您传递0
,以便frameHeight
设置零高度,但第一种方法不会,因为它将覆盖该0
以24
。
frameHeight = frameHeight || 24;
失败frameHeight
= 0 适用于 frameHeight
= 空
frameHeight = frameHeight !== undefined ? frameHeight : 24;
失败frameHeight
= 空工作frameHeight
= 0