2014-03-28 30 views
4

我想訪問不使用try-catch的undefined對象。訪問沒有使用try-catch塊未定義的對象

這是我的目標:如果我想打印parametro2我可以做

var obj = { 
    par1 : { 
    par2 : "Hello" 
    } 
} 

console.log(obj.par1.par2); 

和它的作品。


但是,如果 par1 ID UNDEFINED它崩潰,如果我不使用try-catch。


obj.par1 = undefined; 
    try{ 
    console.log(obj.par1.par2) 
    } catch(e){ 
    console.log("Error" + e); 
    } 

有沒有辦法使用try-catch塊來處理這個without

+0

當'par1'爲'undefined'時,你期望什麼值? – thefourtheye

+0

我不希望它在沒有使用try-catch的情況下崩潰 – jay

+0

然後必須對它進行評估,對吧?你想要什麼「東西」? – thefourtheye

回答

1

如果你需要做這個有很多可以做這樣的事情

if (obj.par1 && obj.par1.par2) { 
    console.log(obj.par1.par2); 
} 
+0

好,但我需要以最好的方式來做,因爲我可以有更深的對象 – jay

+0

我的第一本能就是問你爲什麼需要這樣做。這似乎是一個你不應該有的問題,這可以通過重新構建代碼庫的其他部分來解決。不過,無論如何,我會盡我所能來回答你的問題。接下來想到的就是做這樣的事情。你可以這樣任意地嵌套對象。 http://jsfiddle.net/z3YET/但是,我不會推薦這個。你不應該真的需要這樣做。 –

+0

_「我怎樣才能做到這一點,而不使用提供的兩種技術來做到這一點?」_爲什麼你會隨意拒絕他們? –

1
var nestedObject = { 
    n1: { 
    n2: { 
     n3: { 
     prop: "true" 
     } 
    } 
    } 
}; 



function getNested(obj, key) { 
    var bits = key.split("."); 
    var o = obj; 
    var result; 
    var len = bits.length; 

    for (var i = 0; i < len; i++) { 
    var bit = bits[i]; 
    console.log(o); 
    if (!o[bit]) { 
     return undefined; 
    } 
    o = o[bit]; 
    } 
    return o; 
} 

alert(getNested(nestedObject, 'n1.n2.n3.prop')); 
+0

有趣的,一般化的方法。但是,變量結果似乎沒有被使用。 – Tim

0

,我建議你寫一個輔助功能,這可能是這樣的:

function getKey(obj, keys) { 
    keys = keys.split('.'); 
    var value = obj; 
    if (obj == null) { 
    return obj; 
    } 
    do { 
    value = value[keys.shift()]; 
    } while (value != null && keys.length !== 0); 
    return value; 
} 

var obj = { 
    a: { 
    b: 'hello', 
    c: { 
     d: 'world' 
    } 
    }, 
    e: 'foo' 
}; 

getKey(obj, 'a.b'); // returns 'hello' 
getKey(obj, 'a.c'); // returns { d: 'world' } 
getKey(obj, 'a.c.d'); // returns 'world' 
getKey(obj, 'e');  // returns 'foo' 
getKey(obj, 'f');  // returns undefined 
getKey(obj, 'z.x.y');  // returns undefined 
getKey(undefined, 'f');// returns undefined 
getKey(null, 'f');  // returns null 

我希望這有助於。我只用我提供的值來測試它,但它應該可以正常工作。

相關問題