获取多级javascript对象属性的简便方法

kon*_*hou 0 javascript null properties object

我总是需要处理存在属性不确定的多级js对象:

try { value1 = obj.a.b.c; } catch(e) { value1 = 1; }
try { value2 = obj.d.e.f; } catch(e) { value2 = 2; }
......
Run Code Online (Sandbox Code Playgroud)

是否有更简单的方法或泛型函数(例如ifnull(obj.def,2))不需要大量的尝试捕获?

Der*_*會功夫 5

var value1 = (obj.a && obj.a.b && obj.a.b.c) || 1;
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/DerekL/UfJEQ/

或者用这个:

function ifNull(obj, key, defVal){
    var keys = key.split("."), value;
    for(var i = 0; i < keys.length; i++){
        if(typeof obj[keys[i]] !== "undefined"){
            value = obj = obj[keys[i]];
        }else{
            return defVal;
        }
    }
    return value;
}

var value1 = ifNull(obj, "a.b.c", 1);
Run Code Online (Sandbox Code Playgroud)