【问题标题】:hasOwnProperty is not returning correct value [duplicate]hasOwnProperty 没有返回正确的值[重复]
【发布时间】:2020-09-04 17:54:45
【问题描述】:

hasOwnProperty 没有返回正确的值。

我有两组数据。

var data1 = {
  "Name": "Ana",
  "Class": 3,
  "index": 0,
  "Subject": [
    {
      "Sub1": "Maths",
      "Sub2": "Science",
      "index": 00,
      "Speciality": [
        {
          "Spcl": "Music",
          "Spcl2": "Sports",
          "Spcl3": "Singing",
          "index": "000"
        }
      ]
    }]
}

var data2 = {

"Subject": [
    {
      "Sub1": "Maths",
      "Sub2": "Science",
      "index": 00,
      "Speciality": [
        {
          "Spcl": "Music",
          "Spcl2": "Sports",
          "Spcl3": "Singing",
          "index": "000"
        }
      ]
    }

}

当我给 data1.hasOwnProperty(data2) 时,它返回 false。这段代码有什么问题。数据1有“主题”

【问题讨论】:

  • data2 是一个对象,它不是hasOwnProperty 的合适参数。
  • hasOwnProperty 不会对对象进行深度比较。它只是检查对象是否具有指定的key。所以data1.hasOwnProperty('Subject') 会产生true
  • hasOwnProperty 不会深入研究对象并比较所有内容。它只是检查对象是否具有您正在寻找的 keydata1 没有(也不能有)一个对象作为键,所以它返回false
  • developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… - 记得参考预期行为的参考。
  • 所以要访问“主题”,我需要使用 for loop @zzzzBov

标签: javascript


【解决方案1】:

See this answer:

hasOwnProperty 返回一个布尔值,指示您调用它的对象是否具有带有参数名称的属性。

data2 是一个对象,而不是属性名称。

您要做的是比较两个对象的值。搜索“比较两个对象”,您会找到几个关于如何处理该任务的好答案。

【讨论】:

  • 是的,我明白了,所以在这种情况下,从 data2 访问“主题”的 javascript 方式是什么。假设我在 data2 中只有一个对象,并且我不想在我的代码中使用“主题”
  • Object.values(data2)[0]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-26
  • 1970-01-01
  • 2017-05-16
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
相关资源
最近更新 更多