【问题标题】: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 中使用此代码。

【问题讨论】:

    标签: javascript jquery json 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 运算符...
      猜你喜欢
      • 2019-03-18
      • 1970-01-01
      • 2012-10-17
      • 2017-03-19
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      • 1970-01-01
      相关资源
      最近更新 更多