2017-06-01 23 views
0

know如何检查Object属性是否存在。在JS中是否有相当于Python的.get()?

如果我有几个属性可能会或可能不会出现在我的对象中,这可能会使我的代码复杂化。 Python的解决方案是使用.get()

>>> a = {'x': 1, 'y': 2} 
>>> a.get('z') 
>>> a.get('z', 'hello') 
'hello' 

在第一种情况下,None(布尔-Y来讲,False)返回。

在JS中是否存在这样的构造(纯粹是由于图书馆的污染)?

+1

'a.z || “hello''? – 2017-06-01 12:10:53

+0

您可以使用['Proxy'](https://stackoverflow.com/a/29723887/402037),但一如既往...检查兼容性:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy#Browser_compatibility – Andreas

回答

3

可以实现与简单的操作||

var a = {x:1, y:2}; 

console.log(a.x); // Output: 1 
console.log(a.z); // Output: undefined 
console.log(a.z || 'hello'); // Output: hello 

var b = (a['y'] || 'hello'); // b = 2 
var c = (a['z'] || 'hello'); // c = 'hello' 
+0

发生这种情况是因为您试图从变量'z'访问属性。访问它的正确方法是'a ['z']'或'az' – rafascar

+0

[它在这里似乎工作正常。](https://jsfiddle.net/psj15pq6/1/) – rafascar

+1

如果混合使用将其值评估为[truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy),并将其作为[falsy](https://developer.mozilla.org/en- US/docs/Glossary/Falsy)... :(对不起......如果你正在测试的属性有[falsy](https://developer.mozilla.org/en-US/docs/Glossary/) Falsy)值的解决方案将返回“默认值”:[fiddle](https://jsfiddle.net/x76dxd21/) – Andreas

相关问题