如何使用默认值从Object获取值

时间:2012-01-25 14:06:32

标签: javascript object

我经常发现自己将配置值传递给访问它们的函数,如下所示:

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: ....
   }
   ...
}

并进行对象合并。

然后将对象编码为param String。但正如您所见,对象有时也包含参数名称。

5 个答案:

答案 0 :(得分:58)

通常,当某些变量评估为falsy时,可以使用or operator指定默认值:

var foo = couldBeUndefined || "some default";

这样:

var arg1 = config.args.arg1 || "test";
var arg2 = config.args.arg2 || "param2";

假设始终定义config.args,如示例代码所示。

答案 1 :(得分:15)

看起来最终lodash具有_.get()功能!

答案 2 :(得分:5)

借助ES2018,您现在可以编写wiki = requests.get('http://en.wikipedia.org/wiki/Star_Wars', headers={'Content-Type' : 'application/json'})

Spread syntax - JavaScript | MDN

使用比Object.assign()短的语法,现在可以进行浅克隆(不包括原型)或合并对象。

options = { ...defaults, ...options }

答案 3 :(得分:3)

尝试var options = extend(defaults, userOptions);

通过这种方式,您可以获得所有userOptions,并在未通过任何选项时回退到默认值。

注意使用您想要的任何extend实现。

答案 4 :(得分:1)

在 ECMAScript 2020 中,使用 Nullish coalescing operator 可能更安全。

let foo = obj.maybeUndefined ?? "default value";

JS treats 0, -0, null, false, NaN, undefined, or the empty string ("") as falsy。所以,在下面的例子中使用or运算符设置默认值可能会导致意想不到的结果

let obj = { maybeUndefined: 0 };
let foo = obj.maybeUndefined || 1; // foo == 1

这里,当 foo 被实际定义时,1 变得等于 maybeUndefined。如果仅当 foo 实际上是 maybeUndefinedundefined 时才应为 null 分配默认值,那么我们可以使用 Nullish coalescing operator

let obj = { maybeUndefined: 0 };
let foo = obj.maybeUndefined ?? 1; // foo == 0

let obj = {};
let foo = obj.maybeUndefined ?? 1; // foo == 1