我怎么写一个||在 Javascript 中,其中 0 不被视为假值

How do I write an || expression in Javascript where 0 isn't treated as a falsy value?

本文关键字:其中 一个 Javascript      更新时间:2023-09-26

请原谅我的英语。我不是母语人士。

当我编写这样的代码时,我的问题来了

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

问题是0应该是一个有效的值,但它会被忽略,因为它在 Javascript 中0是伪造的,它将设置为 || 右侧的默认值。

有没有办法进行修复,这样0就不会被视为虚假?

现在我正在做

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

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

您需要做的就是编写一个辅助函数...

function ifNotSet(val, other) {
    return typeof val === "undefined" ? other : val;
}

您可以将其转换为字符串'0' truthy

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是将数字转换为字符串的简写。

拥有默认选项/设置的常用方法是 jQuery 中的.extend()方法。纯JS也有这种方法,但有一些不同。

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

这是您需要的:

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

调整@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中工作正常。