4

当一个愚蠢的问题出现时,我正在阅读 Three.js 代码:下面的代码之间有什么区别吗?

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

frameHeight = frameHeight || 24;

(frameHeight是函数的参数)

谢谢

4

4 回答 4

9

是的,它们是不同的。

frameHeight = frameHeight || 24;

这将强制frameHeight转换为布尔值。如果是0, '', false, null, undefined, 否则NaN为假,frameHeight默认为 24​​。

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

这将显式检查是否frameHeight不是undefined并且仅用于undefined将其默认为24.

于 2012-08-15T17:32:17.643 回答
2
frameHeight = frameHeight || 24;

^ 也会进行空值检查。还将检查 0、false、空字符串 ('') NaN 和未定义

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

^ 只会检查未定义。

于 2012-08-15T17:31:50.153 回答
2

是的,存在差异,根据具体情况,差异可能很大。

frameHeight = frameHeight || 24

24如果 frameHeight 最初是任何虚假值,例如""0null、或undefined,则将分配给 frame 。NaNfalse

然而:

frameHeight = frameHeight !== undefined ? frameheight : 24

24只有当初始值正好是时才会分配它undefined

因此,在这个特定函数中可能具有重要意义的是,第二种方法将允许您通过0设置frameHeight零高度,但第一种方法不会,因为它将覆盖它024.

于 2012-08-15T17:34:08.880 回答
0
frameHeight = frameHeight || 24;

失败为frameHeight= 0 适用于frameHeight= null

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

失败 for frameHeight= null 适用于frameHeight= 0

于 2012-08-15T17:34:30.857 回答