Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 验证对象中是否存在深度属性_Javascript_Jquery - Fatal编程技术网

Javascript 验证对象中是否存在深度属性

Javascript 验证对象中是否存在深度属性,javascript,jquery,Javascript,Jquery,例如,我想看看response.objects[0].images[0].url是否存在(并且不是null) 验证对象中是否存在url属性的最合适方法是什么 如果我这么做了 if (response.objects[0].images[0].url !== undefined && response.objects[0].images[0].url !== null { console.log(response.objects[0].images[0].url); } 但是

例如,我想看看
response.objects[0].images[0].url是否存在(并且不是null)

验证对象中是否存在url属性的最合适方法是什么

如果我这么做了

if (response.objects[0].images[0].url !== undefined && response.objects[0].images[0].url !== null {
  console.log(response.objects[0].images[0].url);
}
但是如果
url
之前的任何属性本身未定义或为空,则可能会导致问题

我是否应该深入嵌套并验证前面的每个属性是否都不是null,也不是未定义的?

使用解析器:

function resolve(start) {
    return [].slice.call(arguments, 1).reduce(function(obj, prop) {
        return obj && obj[prop];
    }, start);
}


resolve(response, "objects", 0, "images", 0, "url");

如果返回undefined,那么一路上有些东西坏了…

如果(x!=null)在一次比较中同时命中undefined和null…如果之前(嵌套的距离不远)的某个东西是null,这不就回答了你的问题,你正在检查的那个东西是null吗,如果失败-你知道它或者它的父项为空,或者像下面这样检查每一层,回答相同的问题@ScottSelby:如果你检测到一个“相同的问题”,你应该像一个复制者一样谢谢,下次会做的怎么样:
[].reduce.call(参数,函数(obj,prop){
@elclars:I feed 1 to the slice(),它不只是在那里“对于传统”…;)是的,刚刚注意到,我这样做了。可能还有其他DUP。@elclanrs:点也很好,除非键有点。数组和参数一样工作,避免与方便且诱人的字符串路径发生任何名称冲突。我喜欢字符串(arr)。split(/[,]/)在我想要这样的灵活性的受控环境中…@alex:slice总是创建一个新数组,它是通用的,这意味着它通过将其用作数组来处理类似于数组的参数和字符串。slice的第一个参数是左边的起始位置,我们希望它是1而不是0,这样我们就有空间放置object、 总之,我们调用一个泛型方法[].slice,将其设置为参数,将start pos设置为1,这样会输出一个新数组,在返回之前按照指定进行切碎。