I constantly find myself passing config values to functions accessing them like this:
var arg1 = 'test1';
if(isUndefined(config.args.arg1)){
arg1 = config.args.arg1;
}
var arg2 = 'param2';
if(isUndefined(config.args.arg2)){
arg2 = config.args.arg2;
}
var arg3 = '123';
if(isUndefined(config.args.arg3)){
arg3 = config.args.arg3;
}
where I later use them like this:
var url = '<some-url>?id='+arg1+'&='+arg2 +'=' + arg3;
Does jQuery/ExtJS or any other framework provide a solution to access variables like this in a simple way, and give variables a default value?
Something like:
getValueOfObject(config,'args.arg3','<default>');
Or is there maybe a standard solution for this.
NOTE:
I was also thinking about the common pattern where you have defaults
var defaults = {
args: {
args1: ....
}
...
}
and doing an object merge.
And then encoding the object to a param String. But as you can see the object values also sometimes contain parameter names.
Generally, one can use the or operator to assign a default when some variable evaluates to falsy:
var foo = couldBeUndefined || "some default";
so:
var arg1 = config.args.arg1 || "test";
var arg2 = config.args.arg2 || "param2";
assuming that config.args
is always defined, as your example code implies.
With ES2018, you can now write options = { ...defaults, ...options }
:
Spread syntax - JavaScript | MDN
Shallow-cloning (excluding prototype) or merging of objects is now possible using a shorter syntax than
Object.assign()
.const obj1 = { foo: 'bar', x: 42 }; const obj2 = { foo: 'baz', y: 13 }; const clonedObj = { ...obj1 }; // Object { foo: "bar", x: 42 } const mergedObj = { ...obj1, ...obj2 }; // Object { foo: "baz", x: 42, y: 13 }
try var options = extend(defaults, userOptions);
This way you get all the userOptions and fall back to defaults when they don't pass any options.
Note use any extend
implementation you want.
With ECMAScript 2020 it may be safer to use Nullish coalescing operator .
let foo = obj.maybeUndefined ?? "default value";
JS treats 0, -0, null, false, NaN, undefined, or the empty string ("") as falsy
. So, using or
operator for setting a default value in the following example may cause unexpected results
let obj = { maybeUndefined: 0 };
let foo = obj.maybeUndefined || 1; // foo == 1
Here, foo
becomes equal to 1
, when maybeUndefined
is actually defined. If foo
should be assigned a default value only when maybeUndefined
is actually undefined
or null
, then we can use Nullish coalescing operator .
let obj = { maybeUndefined: 0 };
let foo = obj.maybeUndefined ?? 1; // foo == 0
let obj = {};
let foo = obj.maybeUndefined ?? 1; // foo == 1
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.