2011-05-11 55 views
0
{ 
    "@": { 
     "xmlns": "http://ses.amazonaws.com/doc/2010-12-01/" 
    }, 
    "SendEmailResult": { 
     "MessageId": "0000012fdd10caaf-021c6e9e-e872-4b35-ad94-1d11c79a6324-000000" 
    }, 
    "ResponseMetadata": { 
     "RequestId": "736d5bb2-7b7d-11e0-b435-f7b0c9315f0d" 
    } 
} 

如何檢查對象中是否存在「MessageId」? (沒有丟失錯誤) 我可能會返回其他json對象,並且我需要知道我得到的是否有「MessageId」。如何檢查此javascript對象?

回答

4

假設你有一個參考它obj,則:

if (obj && obj.SendEmailResult && "MessageId" in obj.SendEmailResult) { 
    // The "MessageId" property exists in `obj.SendEmailResult` 
} 

可能更有效,但:

var msgid = obj && obj.SendEmailResult && obj.SendEmailResult.MessageId; 
if (msgid) { 
    // The property exists and is "truthy", `msgid` is the value 
} 

JavaScript的AND運算&&比一些其他語言的更加有用,它返回右側的如果兩個操作數都是「truthy」(而不僅僅是返回true/false結果,因爲在大多數語言)。 「truthy」值是一個非「falsy」(顯然)的值。 「Falsy」值是false,undefined,null,""0

所以上面基本上說「設置msgidobj.SendEmailResult.MessageId提供objobj.SomeEmailResult都存在。

(該||運營商是similarly powerful

+0

+1有關使用'obj.SendEmailRequest.hasOwnProperty什麼(」 MessageId')'來防止[這種稀罕性](http://jsfiddle.net/RxPF5/)? – alex 2011-05-11 03:30:07

+0

@alex:當然,如果合適的話。99%的時間,你不在乎,你只是想要屬性 - 無論它來自何處。:-)(並且你想跑遠,遠離任何延伸'Object.property'的代碼。) – 2011-05-11 03:32:52

+0

J.做我的人t應該被引入給爲undefined指定一個不同值的人。 – alex 2011-05-11 03:38:53

0

假設你得到的結果在一個變量叫做因此,你應該能夠用一個簡單的if語句來做到這一點(考慮到if語句短路的JavaScript:

if (result && result["SendEmailResult"] && result["SendEmailResult"]["MessageId"]) { 
    //execute your code 
}