2011-09-28 43 views
1

我有一个JSON对象,我从服务器获取,有时候它很简单,例如:使用Javascript - 无法确定是否JSON对象包含真正

{ "urls": ["http://google.com", "http://bing.com"] } 

不过,我需要检查,如果urls['tasks']['ipv6']包含真我正在使用的代码是:

if (urls['tasks']['ipv6'] === true) { 
    console.log('true'); 
} 

但由于网址[“任务”]不存在,我得到以下错误:

Uncaught TypeError: Cannot read property 'ipv6' of undefined 

有没有简单的方法来做到这一点?我很难在网上找到解决方案。我也试过jQuery的$ .isEmptyObject,并且对基于jQuery的解决方案感到满意。为了参考,我实际上在node.js中使用了这段代码。

回答

4

这应该对你有用。

if (urls["tasks"] && urls["tasks"]["ipv6"] && urls["tasks"]["ipv6"] === true) 
{ 
    ... 
} 

您可以添加urls在离开以及检查,如果你需要,你可以省略中间检查urls["tasks"]["ipv6"],因为如果它的undefined这绝不是true

问题是,您必须首先检查是否存在上层属性,然后再进行下钻。由于Javascript(以及大多数当今的语言)不使用完整的布尔演变这个工程。

+2

我觉得中间'网址[ “任务”] [中的 “IPv6”]'测试是不必要的。 FWIW,你称之为*全布尔演变*也被称为*短路评估*。 –

+0

@FelixKling:我编辑了我的答案以包含此信息。谢谢。 –

+0

@FelixKling:*短路评估*实际上与另一个在多年前被用作Turbo Pascal编译器开关的术语相反...... :)但是你说得对,它是关于相同的范例。 –

0
if (urls && urls["tasks"] && urls["tasks"]["ipv6"] === true) { 
    console.log("true"); 
} 
0

检查您之前将typeof检查真的还是假的......

 

if(typeof(urls['tasks']) != "undefined") 
{ 
    if(typeof(urls['tasks']['ipv6']) != "undefined") 
    { 
     if(urls['tasks']['ipv6'] === true) 
     { 
      console.log("I am true & I exist"); 
     } 
    } 
} 
 
+0

*略*冗长,但仍然无效......“未定义”应该是文字而不是字符串......或者使用'typeof'返回字符串的运算符... –