Javascript - 无法确定 JSON 对象是不是包含 true
Posted
技术标签:
【中文标题】Javascript - 无法确定 JSON 对象是不是包含 true【英文标题】:Javascript - Can't determine if JSON object contains trueJavascript - 无法确定 JSON 对象是否包含 true 【发布时间】:2011-11-26 16:17:03 【问题描述】:我有一个从服务器检索的 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 中使用此代码。
【问题讨论】:
【参考方案1】:这应该对你有用。
if (urls["tasks"] && urls["tasks"]["ipv6"] && urls["tasks"]["ipv6"] === true)
...
如果需要,您也可以在左侧添加urls
检查,并且可以省略中间检查urls["tasks"]["ipv6"]
,因为如果是undefined
,则肯定不是true
。
问题是你必须先检查上层属性是否存在,然后再向下钻取。而且由于 javascript(以及当今的大多数语言)不使用 完整的布尔进化,因此可以使用。
【讨论】:
我认为中间的urls["tasks"]["ipv6"]
测试是不必要的。 FWIW,您所说的完全布尔进化也称为短路评估。
@FelixKling:我编辑了答案以包含此信息。谢谢。
@FelixKling:短路评估实际上与几年前在 Turbo Pascal 中用作编译器开关的另一个术语相反...... :) 但你是是的,它是相同的范式。
啊,好的,谢谢 :) 我只知道另一个术语(我知道它实际上是相反的)。无论如何,很清楚:)
@RobertKoritnik 谢谢一堆,它工作得很好,我不知道它会这样评估。【参考方案2】:
if (urls && urls["tasks"] && urls["tasks"]["ipv6"] === true)
console.log("true");
【讨论】:
【参考方案3】:在检查真假之前检查 typeof...
if(typeof(urls['tasks']) != "undefined")
if(typeof(urls['tasks']['ipv6']) != "undefined")
if(urls['tasks']['ipv6'] === true)
console.log("I am true & I exist");
【讨论】:
稍微冗长但仍然无效..."undefined"
应该是文字而不是字符串...或使用返回字符串的typeof
运算符...以上是关于Javascript - 无法确定 JSON 对象是不是包含 true的主要内容,如果未能解决你的问题,请参考以下文章
httpClient.GetAsync电话扔System.ArgumentException:无法确定JSON对象类型
无法从 JavaScript 中的 JSON 文件获取具有日期格式的对象 [重复]