当前位置: 首页 > 知识库问答 >
问题:

Javascript:检查对象是否具有属性[重复]

池赞
2023-03-14

这里有几个关于如何检查对象中是否存在属性的答案。

我一直在使用

if(myObj.hasOwnProperty('propName'))

但我想知道这和

if('propName' in myObj){

共有2个答案

伯鸿达
2023-03-14
匿名用户

是的,有区别。hasOwnProperty()忽略了原型添加的属性和方法。我试着用例子来解释。例如,如果您有对象的原型

Object.prototype.something = function() {};

假设您有以下对象

var obj = {
    "a" : "one",
    "b" : "two"
};

和循环:

for ( var i in obj ) {
    //if (obj.hasOwnProperty(i)) {
        console.log(obj[i]);
    //}
}

如果没有hasOwnProperty,它将输出一个两个函数(),而只有hasOwnProperty()方法

查看第一个和第二个演示之间的差异

司寇灵均
2023-03-14

它们几乎相等,不同的是,hasOwnProperty不检查原型链,而中的检查原型链。

一个例子

var test = function() {}

test.prototype.newProp = function() {}

var instance = new test();

instance.hasOwnProperty('newProp'); // false
'newProp' in instance // true

小提琴

如前所述,Object.hasOwnProperty只返回自己的属性,即直接添加的属性,而不是添加到原型的属性。

 类似资料:
  • 问题内容: 如何检查对象在JavaScript中是否具有特定属性? 考虑: 那是最好的方法吗? 问题答案: 我对所给出的答案感到困惑-他们中的大多数都是完全错误的。当然,您可以拥有具有未定义,空值或假值的对象属性。因此,简单地将属性检查减少到甚至更糟,将给您完全误导的结果。 这取决于您要查找的内容。如果您想知道一个对象是否物理上包含一个属性(并且它不是来自原型链的某个地方),那么您就可以这样做。所

  • 问题内容: 在遍历数组时,我需要一些帮助,我会不断卡住或重新发明轮子。 如何检查数组中是否有两个(或多个)相同的名称值?我不需要计数器,只需在数组值不是唯一的情况下设置一些变量即可。请记住,数组长度是动态的,数组值也是动态的。 问题答案: 使用array.prototype.map和array.prototype.some:

  • 我想检查一个对象是否有新的子对象。我的意思是我有一个带有x嵌套对象的对象,但是如果主对象有新对象,我会检查它。有什么现有的解决方案来检查这个问题吗? 我的目标是如果对象有新项目,则调用函数。每次数组更改时,此代码都会调用该函数。也当一些项目被删除。这部分功能是错误的。有办法修好它吗?

  • 请看do while循环,我认为注释是不言自明的。我想检查该集合是否设置了所有具有符号a、b、c、d的卡片(借助数组或其他任何东西实现它)。

  • 我有一个这样的对象数组: 我希望每个人(名字)都有一个对象,并添加他们的对象。 因此,最终阵列将是: 我使用的真正数组非常大,这就是为什么我正在寻找最有效的方法。

  • 问题内容: 如何检查值是否是JavaScript中的Object? 问题答案: 更新 : 这个答案是不完整的,并且会产生误导性的结果 。例如,在JavaScript中也被视为类型,更不用说其他几种极端情况了。请遵循以下建议,然后转到其他 原始答案 : 尝试使用和/或。 编辑:这个答案给出了一个如何检查变量属性的想法,但是它不是一个防弹配方(毕竟根本没有配方!)来检查它是否是一个对象,而不是对象。由