我有一个我正在从服务器检索的JSON对象,有时它非常简单,例如:
{ "urls": ["http://google.com", "http://bing.com"] }
但是我需要检查urls['tasks']['ipv6']
是否包含true,我正在使用的代码是:
if (urls['tasks']['ipv6'] === true) {
console.log('true');
}
但由于urls ['tasks']不存在,我收到以下错误:
Uncaught TypeError: Cannot read property 'ipv6' of undefined
有一种简单的方法吗?我很难在网上找到解决方案。我也尝试了jQuery的$ .isEmptyObject,并对基于jQuery的解决方案感到满意。作为参考,我实际上在node.js中使用了这段代码。
答案 0 :(得分:4)
这应该适合你。
if (urls["tasks"] && urls["tasks"]["ipv6"] && urls["tasks"]["ipv6"] === true)
{
...
}
如果需要,您也可以在左侧添加urls
检查,并且可以省略中间检查urls["tasks"]["ipv6"]
,因为如果undefined
它肯定不是true
}。
问题是你必须首先检查在向下钻取之前是否存在上层属性。由于Javascript(以及当今大多数语言)不使用完全布尔进化,因此无效。
答案 1 :(得分:0)
if (urls && urls["tasks"] && urls["tasks"]["ipv6"] === true) {
console.log("true");
}
答案 2 :(得分:0)
在检查true或false之前检查typeof ...
if(typeof(urls['tasks']) != "undefined")
{
if(typeof(urls['tasks']['ipv6']) != "undefined")
{
if(urls['tasks']['ipv6'] === true)
{
console.log("I am true & I exist");
}
}
}