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的主要内容,如果未能解决你的问题,请参考以下文章

无法确定类型“类”的 JSON 对象类型

httpClient.GetAsync电话扔System.ArgumentException:无法确定JSON对象类型

无法确定类型“Class”的JSON对象类型

无法从 JavaScript 中的 JSON 文件获取具有日期格式的对象 [重复]

无法解析来自thymeleaf的javascript中的JSON对象

错误请求 MVC 时如何返回 JSON 对象