在JavaScript中,如何编写一个||表达式,其中0不被视为假值?

5
请原谅我的英语,我不是以英语为母语的人。
当我编写如下代码时,遇到了问题。
luminosity = settings.luminosity || 50;
opacity = settings.opacity || 100;

问题在于0应该是一个有效值,但由于Javascript中0为假值,所以它将被忽略,并设置为||右侧的默认值。

有没有一种方法可以修复这个问题,使0不被视为假值?

目前我正在执行以下操作:

luminosity = "luminosity" in settings ? settings.luminosity : 50;

但我不喜欢这样做,因为它太长了。

1
我认为你无法将其写得更短。此外,你的方法易于阅读,所以我甚至不会尝试去改变它。 - user123444555621
4个回答

2
你可以将它转换成字符串,'0'真值
luminosity = settings.luminosity === 0 ? '' + settings.luminosity : settings.luminosity || 50;
opacity = settings.opacity === 0 ? '' + settings.opacity : settings.opacity || 100;

或者根据您的输入或要求,您可以简单地使用以下内容:

luminosity = '' + settings.luminosity || 50;
opacity = '' + settings.opacity || 100;

"

'' + number" 是将数字转换为字符串的简写方式。

"

''+undefined"undefined",所以这并不能解决问题。 - user123444555621

2

设置默认选项/设置的常见方法是使用jQuery中的.extend()方法。纯JS也有这个方法,但有所不同。

/* merge object2 into object1 */
$.extend(object1, object2);

这是您需要的内容:

var defaultSetting = {luminosity : 50, opacity : 100};
setting = $.extend({}, defaultSetting, setting);

我相信应该这样写: setting = $.extend({}, defaultSetting, setting);。在上面的答案中,defaultSetting中的属性会覆盖设置中的属性,即使设置中的属性已经定义。 - Matt Coughlin
1
问题中没有提到jQuery。 - user1106925

2
你只需要编写一个帮助函数...
function ifNotSet(val, other) {
    return typeof val === "undefined" ? other : val;
}

1
调整 @Tooraj 初始版本的代码:
var setting = {luminosity:0};
var defaultSetting = {luminosity:50, opacity:100};

setting = $.extend({}, defaultSetting, setting);

// setting now has a value of {luminosity:0, opacity:100}

我以前没有做过这个。但在FF、Chrome和IE9中似乎都可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接