对象的条件JavaScript

我会问关于JS中的对象条件的最佳做法。

FEXP:

if (abcd == 1) 

但如果我不知道该对象是否有正确的结构,我需要做这样的条件:

 if(a && ab && abc && abcd && abcd == 1) 

是检查值的最好方法吗? 只尝试抓住? 通用方法是这样的:

JavaScripttesting是否存在嵌套的对象键

是不是最好的方式,因为我需要改变我的条件的定义。 我可以在这个例子中使用这样的规则:if(ab [1] .cd)

我需要记住所有的path,channgestring等…

我正在寻找良好的解决scheme我的第一个条件:if(abcd == 1)

(if(abcd)== 1)不改变它或改变它,

尝试赶上确定,但没有大条件的身体:(

你可以检查每个值,并继续检查,直到你用尽了深度。 我已经写了一个小帮手函数,它会自动执行这个过程:

 function checkDeep(object){ for(var i = 1; i < arguments.length; i++){ if(typeof object[arguments[i]] !== "undefined"){ /* Check the type of the nested value - if not undefined, * set it to `object` and continue looping. */ object = object[arguments[i]] } else { /* If it is not undefined, return false. */ return false; } } /* If we made it past the loop, all the values exist and we return true. */ return true; } 

您可以在最后添加尽可能多的variables,看看它们是否嵌套在以前的值中。 如果它在任何地方连锁打破,它将返回false。 所以它的定义是:

 checkDeep(object, var1[, var2, var3, ...]); 

这将被称为:

 checkDeep({a:{b:{c:['d']}}}, 'a', 'b', 'c'); // true checkDeep({a:{b:{c:['d']}}}, 'a', 'c', 'c'); // false 

如果你想在那个位置的值,只是return object在函数的结尾,而不是return true

 function checkDeep(object){ for(var i = 1; i < arguments.length; i++){ if(typeof object[arguments[i]] != 'undefined') object = object[arguments[i]] else return false; } return true; } var object = {a:{b:{c:['d']}}}; document.write("Order a,c,c in '{a:{b:{c:['d']}}}' is " + (checkDeep(object, 'a', 'c', 'c') ? "true" : "false") + "<br />"); checkDeep(object, 'a', 'c', 'c'); // false document.write("Order a,b,c in '{a:{b:{c:['d']}}}' is " + (checkDeep(object, 'a', 'b', 'c') ? "true" : "false") + "<br />"); checkDeep(object, 'a', 'b', 'c'); // true 

CoffeeScript有存在的操作符:

 a?.b?.c?.d 

关于这个话题的广泛讨论,也称为“无效传播运算符”,在ES6讨论列表上https://esdiscuss.org/topic/existential-operator-null-propagation-operator

你可以试试:

 function get_value(variable, elements) { if (elements.length === 0) { return variable; } var key = elements.shift(); return variable[key] && get_value(variable[key], elements); } var a={b:{c:{d:{e:24}}}} console.log(get_value(a, ['b','c','d','e'])) //24 console.log(get_value(a, ['b','c','d','e', 'f'])) //undefined 

仅用于检查值是否存在:

 function check(variable, elements) { if (elements.length === 0) { return true; } var key = elements.shift(); return variable[key] !== undefined && check(variable[key], elements); }