5

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

当我编写这样的代码时,我的问题就出现了

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

问题是它0应该是一个有效值,但它会被忽略,因为0它在 Javascript 中是虚假的,它将设置为||.

有没有办法进行修复所以0不被视为虚假?

现在我正在做

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

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

4

4 回答 4

2

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

于 2012-06-16T19:40:52.540 回答
2

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

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

这就是你需要的:

var defaultSetting = {luminosity : 50, opacity : 100};
setting = $.extend({}, defaultSetting, setting);
于 2012-06-16T19:46:53.693 回答
2

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

function ifNotSet(val, other) {
    return typeof val === "undefined" ? other : val;
}
于 2012-06-16T19:54:20.817 回答
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 中运行良好。

于 2012-06-16T20:12:08.153 回答