2011-09-28 42 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'返回字符串的運算符... –