2017-06-01 61 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