Python的词典get方法允许我指定在键不存在时应该返回的内容。对于我目前的情况,我想要一个字典返回。我如何在Javascript中执行此操作?
答案 0 :(得分:2)
JavaScript没有帮助功能。您需要明确测试。
if ("myProperty" in myObject) {
return { another: "object" };
} else {
return myObject.myProperty;
}
您可以使用三元运算符以较少的代码执行相同的操作。
return ("myProperty" in myObject) ? myObject.myProperty : { another: "object" };
答案 1 :(得分:2)
没有javascript相当于python字典的get方法。如果您自己编写,作为一个函数,它将如下所示:
function get(object, key, default_value) {
var result = object[key];
return (typeof result !== "undefined") ? result : default_value;
}
使用它像:
var obj = {"a": 1};
get(obj, "a", 2); // -> 1
get(obj, "b", 2); // -> 2
请注意,所请求的密钥也将在obj。
的原型中找到如果你真的想要一个方法而不是一个函数(obj.get("a", 2)
),你需要扩展Object的原型。这通常被认为是一个坏主意,请参阅Extending Object.prototype JavaScript
答案 2 :(得分:1)
您可以使用代理(非常新):
var handler = {
get: function(target, name){
return name in target?
target[name] :
"Default";
}
};
var dictionary={"hi":true};
var dict = new Proxy(dictionary, handler);
dict.a = 1;
dict.b = undefined;
console.log(dict.a, dict.b,dict.hi); // 1, undefined,true
console.log(dict.new); //"Default"
//the proxied object gets changed:
console.log(dictionary.a, dictionary.b,dictionary.hi); // 1, undefined,true
console.log(dictionary.new); //undefined
代理是一个通过处理程序反映所有更改和请求的对象。在这种情况下,我们可以正常编写/访问字典的属性,但如果我们访问不存在的值,它将返回“默认”
答案 3 :(得分:1)
我更喜欢这样使用逻辑或:
foo.bar || 'default'
如果checks是foo.bar是错误的,因此如果bar未定义,它将返回“默认”。
您只需要关心foo是一个对象。否则会引发ReferenceError。
答案 4 :(得分:0)
这对我有用
let obj = {"a": 1};
let default = 100
obj["a"] || default; // -> 1
obj["b"] || default; // -> 100
但是!有一些限制,如果 !!obj["a"] === false
我们总是得到默认值......所以最好只检查 obj 中的键,以完全确定。