【问题标题】:The typeof operator is not operating as expectedtypeof 运算符未按预期运行
【发布时间】:2016-05-05 17:05:38
【问题描述】:

我正在尝试检查是否存在特定的 javascript 对象。

var success = function(data) {

     var x= 0;
     var numOfCards = data.length;

     for (x=0;x<data.length - 1;x++)
        {
          if (typeof data[x].labels[0].name !== 'undefined')
            {
              alert("Object Exists");
            }
        }
     }

但是,Chrome 收到以下错误:

(index):21 Uncaught TypeError: Cannot read property 'name' of undefined

当然,我使用 typeof 来检查对象的状态本身不应该导致错误吗?在第一次迭代时,警报框按预期显示,因为:

data[0].labels[0].name = "我是一个价值"

然而,

数据[0].labels[1].name

由于“标签”数组为空而导致错误。

【问题讨论】:

  • typeof 只返回一个值的“类型”。在评估生成值的表达式时,您肯定会遇到错误。示例:typeof foo()。如果foo 不是函数,则会抛出错误。

标签: javascript function if-statement undefined typeof


【解决方案1】:

这肯定按预期工作。

当然,我使用 typeof 来检查对象的状态本身不应该导致错误吗?

当然,如果 name 未定义。在这种情况下,data[0].labels[0] 已经未定义!

如果您希望所有级别都为undefined,则必须在每个级别嵌套if 语句和typeof,然后再检查其中的嵌套对象。

【讨论】:

  • 我多么希望 Javascript 有像 Coffeescript 和 Ruby 一样的内联存在运算符,这样您就不会被手动编写这些嵌套检查的开销所困扰。例如data[0]?.labels[0]?.name
【解决方案2】:

在检查 typeof data[x].labels[0].name !== 'undefined' 之前,请确保 typeof data[x].labels[0] !== 'undefined

if (typeof data[x].labels[0] !== 'undefined')
{
    alert("Object Exists");
}

【讨论】:

    猜你喜欢
    • 2016-12-30
    • 1970-01-01
    • 2015-05-15
    • 2017-11-25
    • 1970-01-01
    • 2015-05-11
    • 2019-06-20
    • 2021-04-13
    • 1970-01-01
    相关资源
    最近更新 更多