2017-01-12 54 views
2

我想知道是否有一個更乾淨的方式做空合併和檢查未定義?安全地合併JavaScript的子屬性

例如,我有我要初始化一個對象的屬性值,可能會或可能不會進行定義,在這種情況下空的變量是最好的,因爲falseyness是一件美妙的事情

function DoWork(){ 
    var foobar = 
     typeof foo !== "undefined" 
     ? typeof foo["bar"] !== "undefined" 
      ? foo["bar"] || null 
      : null 
     : null; 

    ... 
} 

console.log(JSON.stringify(foobar)); //output is either foo["bar"]'s value or null 

正如你所看到的,這會變得混亂。我很好奇,如果有更好的方法來處理這種事情。

謝謝!

回答

2

這裏沒有內置的語法。像lodash圖書館有深get方法,是解決這個問題:

_.get(x, 'deep.path.property') 

以上將返回x.deep.path.property值,或者undefined如果沿途的對象,包括x的任何,不存在。

這樣的功能並不難寫。你可以做一個思考的練習,並獲得你想要的接口(用null而不是undefined),或者你可以查找lodash.get實現(你需要遵循一些導入)。