[英]How to get a nested and optional object value with a default value and define type?
[英]How to get value from Object, with default value
我經常發現自己將配置值傳遞給訪問它們的函數,如下所示:
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;
}
我后來像這樣使用它們:
var url = '<some-url>?id='+arg1+'&='+arg2 +'=' + arg3;
jQuery/ExtJS 或任何其他框架是否提供了一種解決方案來以簡單的方式訪問這樣的變量,並為變量提供默認值?
就像是:
getValueOfObject(config,'args.arg3','<default>');
或者是否有一個標准的解決方案。
筆記:
我也在考慮你有默認值的常見模式
var defaults = {
args: {
args1: ....
}
...
}
並進行對象合並。
然后將對象編碼為參數字符串。 但是正如您所看到的,對象值有時也包含參數名稱。
通常,當某個變量的計算結果為假時,可以使用or 運算符來分配默認值:
var foo = couldBeUndefined || "some default";
所以:
var arg1 = config.args.arg1 || "test";
var arg2 = config.args.arg2 || "param2";
假設config.args
始終定義,正如您的示例代碼所暗示的那樣。
使用 ES2018,您現在可以編寫options = { ...defaults, ...options }
:
淺克隆(不包括原型)或合並對象現在可以使用比
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 }
嘗試var options = extend(defaults, userOptions);
通過這種方式,您可以獲得所有 userOptions 並在它們不傳遞任何選項時回退到默認值。
請注意使用您想要的任何extend
實現。
在 ECMAScript 2020 中,使用Nullish 合並運算符可能更安全。
let foo = obj.maybeUndefined ?? "default value";
JS 將 0、-0、null、false、NaN、undefined 或空字符串 ("") 視為falsy
。 所以,在下面的例子中使用or
運算符設置默認值可能會導致意想不到的結果
let obj = { maybeUndefined: 0 };
let foo = obj.maybeUndefined || 1; // foo == 1
在這里, foo
變為等於1
,而當maybeUndefined
實際定義時。 如果foo
只在maybeUndefined
實際上是undefined
或null
時才應該被分配一個默認值,那么我們可以使用Nullish 合並運算符。
let obj = { maybeUndefined: 0 };
let foo = obj.maybeUndefined ?? 1; // foo == 0
let obj = {};
let foo = obj.maybeUndefined ?? 1; // foo == 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.