【问题标题】:How to fix Cannot read property hasOwnProperty of undefined如何修复无法读取未定义的属性 hasOwnProperty
【发布时间】:2021-02-28 21:24:41
【问题描述】:

如何解决无法读取未定义的属性“hasOwnProperty”?

使用 Angular.JS 1.3

parentConroller 中分配 $rootScope.settings 中的响应数据。

所以 rootScope 会是这样的

    $rootScope.settings = api.data;

//sample
    $rootScope.settings:{
        "lastLogin":"2005-01-01",
        "isStudent": true,
        "assignedCourse": "['JAVA + DS']"
    }

并访问 anotherController.JS 中的 $rootScope 数据。但是在这里我不希望我的数组在字符串中,所以要删除双引号,我尝试了以下方法

尝试 1:

 if($rootScope.settings.hasOwnProperty('assignedCourse')) {
        $rootScope.settings.assignedCourse = ['JAVA + DS']
    }

尝试 2:

$rootScope.settings.assignedCourse = JSON.parse(rootScope.settings.assignedCourse.replace(/'/g, '"'));

// giving me Error: Unexpected token ' in JSON at position 1

尝试 1 在应用程序中工作,但当我运行显示 TypeError: Cannot read property 'hasOwnProperty' of undefined

的业力调试器时它失败了

真的不知道如何解决这个问题。努力修复超过一天

我已经完成了一些与我的问题相关的 SO。但没有得到更好的解决方案

旁注:目前仅使用普通的旧 JavaScript,而不是 es6 或更新版本。

【问题讨论】:

  • 您的$rootScope 对象没有属性[settings],因此返回undefined ($rootScope.settings === undefined)。尝试访问 undefined 上的属性会导致您的错误。所以问题不在于您的数组,而在于您的 $rootScope 具有不同的值

标签: javascript angularjs regex object


【解决方案1】:

对于初学者,您可能希望使用 angular.isDefined($rootScope.settings.assignedCourse) 而不是 hasOwnProperty,因为它在语法上可能更接近您正在测试的内容(定义值而不是财产所有权)

关于尝试 1 在测试中失败,设置未定义。您可能需要重新检查您的测试台,并确保您的示波器按预期进行初始化。

我成功地重新创建了您的尝试 2,我怀疑这里发生了其他事情,可能是由另一行引起的。

【讨论】:

  • 如你所说,假设如果我想检查条件,我应该这样做if ($rootScope.settings.assignedCourse== "Java + DS"){ console.log('say hi'); } 吗?
  • 你能打开一个小提琴,这样我就可以清楚地了解你如何避免双引号并获得预期的输出
  • @Mr.Learner 双引号不是问题。 settings 不是您的 $rootScope 的属性。您甚至没有达到在数组中替换引号的程度(因为数组不存在)。
  • @knittl 好吧.. 如果不介意的话。请分享小提琴以直观地了解发生了什么
  • 对于尝试一,它就像rootScope.settings == undefined 一样简单。第二,提供的代码似乎不是问题。我们需要更多信息来提供解决方案。我很好奇您的尝试 2 是否也出于同样的原因在测试中失败。如果设置未定义也会导致问题(但如果是这种情况,您的 JSON 解析会抱怨第一个标记是“u”)请使用相关信息更新您的问题。
猜你喜欢
  • 1970-01-01
  • 2019-12-08
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 2019-08-19
  • 2019-11-02
  • 2021-10-03
  • 2021-10-28
相关资源
最近更新 更多