2011-05-11 53 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 
}