请原谅我的英语。我不是母语人士。
当我编写像这样的代码时,我的问题出现了
luminosity = settings.luminosity || 50;
opacity = settings.opacity || 100;
问题是0
应该是一个有效的值,但它会被忽略,因为0
在Javascript中是假的,它将设置为{{1的右侧的默认值}}
有没有办法进行修复,因此||
不被视为麻痹?
现在我正在做
0
但我不喜欢这样,因为它太长了。
答案 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中运行良好。