Javascript - 无法确定JSON对象是否包含true

时间:2011-09-28 08:28:36

标签: javascript jquery json node.js

我有一个我正在从服务器检索的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中使用了这段代码。

3 个答案:

答案 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");
      }
   }
}