Javascript 如果0不是';t被视为虚假价值?

Javascript 如果0不是';t被视为虚假价值?,javascript,Javascript,请原谅我的英语。我不是以英语为母语的人 当我写这样的代码时,我的问题就来了 luminosity = settings.luminosity || 50; opacity = settings.opacity || 100; 问题是0应该是一个有效值,但它将被忽略,因为0在Javascript中是错误的,它将设置为|右侧的默认值 有没有办法修复0不被视为虚假 现在我正在做 luminosity = "luminosity" in settings ? settings.luminosity :

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

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

luminosity = settings.luminosity || 50;
opacity = settings.opacity || 100;
问题是
0
应该是一个有效值,但它将被忽略,因为
0
在Javascript中是错误的,它将设置为
|
右侧的默认值

有没有办法修复
0
不被视为虚假

现在我正在做

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

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

你可以把它转换成字符串
'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
是将数字转换为字符串的简写形式。

使用默认选项/设置的常用方法是。纯JS也有这种方法,但有一些不同的功能

/* merge object2 into object1 */
$.extend(object1, object2);
这就是您需要的:

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

你所需要做的就是写一个助手函数

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

调整@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中似乎运行良好。

我认为应该是:
setting=$.extend({},defaultSetting,setting)。在上面发布的答案中,defaultSetting中的属性覆盖了setting中的属性,即使setting中的属性已经定义。问题中没有提到jQuery。
''+undefined
“undefined”
,因此这并不能解决问题,我认为您不能将它写得再短一些。此外,你的方法可读性很好,所以我甚至不会试图改变它。