【发布时间】:2017-05-25 15:54:56
【问题描述】:
Python 的字典 get 方法让我可以指定如果键不存在应该返回什么。对于我目前的情况,我想要返回字典。我如何在 Javascript 中做到这一点?
【问题讨论】:
-
dict['key'] ||默认
-
js中也有getter和setter...
标签: javascript
Python 的字典 get 方法让我可以指定如果键不存在应该返回什么。对于我目前的情况,我想要返回字典。我如何在 Javascript 中做到这一点?
【问题讨论】:
标签: javascript
使用现代 javascript,您可以使用 ?? operator
const result = obj[key] ?? default;
请注意,{myKey: undefined} 或 {myKey: null} 之类的情况也会返回默认值,这可能是也可能不是所需的行为。
【讨论】:
JavaScript 没有帮助功能来做到这一点。你需要明确地测试。
if ("myProperty" in myObject) {
return { another: "object" };
} else {
return myObject.myProperty;
}
您可以使用三元运算符用更少的代码做同样的事情。
return ("myProperty" in myObject) ? myObject.myProperty : { another: "object" };
【讨论】:
hasOwnProperty())。
您可以为此使用代理(非常新):
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
代理是通过处理程序反映所有更改和请求的对象。在这种情况下,我们可以正常写入/访问字典的属性,但是如果我们访问不存在的值,它将返回“默认”
【讨论】:
没有与 python 字典 get 方法等效的 javascript。如果你自己写它,作为一个函数,它看起来像这样:
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
【讨论】:
我更喜欢像这样使用逻辑或:
foo.bar || 'default'
如果检查是 foo.bar 是假的,所以如果 bar 未定义,则返回“默认”。
你只需要关心, foo 是一个对象。否则会抛出 ReferenceError。
【讨论】:
这对我有用
let obj = {"a": 1};
let default = 100
obj["a"] || default; // -> 1
obj["b"] || default; // -> 100
但是!有一些限制,如果!!obj["a"] === false 我们总是得到默认值...所以最好只检查是否在 obj 中键入,以完全确定。
【讨论】: