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”
,因此这并不能解决问题,我认为您不能将它写得再短一些。此外,你的方法可读性很好,所以我甚至不会试图改变它。