我怎么写||在Javascript中表达式,其中0不被视为假值?

时间:2012-06-16 19:36:10

标签: javascript

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

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

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

问题是0应该是一个有效的值,但它会被忽略,因为0在Javascript中是假的,它将设置为{{1的右侧的默认值}}

有没有办法进行修复,因此||不被视为麻痹?

现在我正在做

0

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

4 个答案:

答案 0 :(得分: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是将数字转换为字符串的简写。

答案 1 :(得分:2)

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

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

这就是您所需要的:

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

答案 2 :(得分:2)

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

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

答案 3 :(得分: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中运行良好。