当前位置: 首页 > 编程笔记 >

JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法

郑安晏
2023-03-14
本文向大家介绍JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法,包括了JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法的使用技巧和注意事项,需要的朋友参考一下

JavaScript hasOwnProperty() 方法是 Object 的原型方法(也称实例方法),它定义在 Object.prototype 对象之上,所有 Object 的实例对象都会继承 hasOwnProperty() 方法。

hasOwnProperty() 方法用来检测一个属性是否是对象的自有属性,而不是从原型链继承的。如果该属性是自有属性,那么返回 true,否则返回 false。换句话说,hasOwnProperty() 方法不会检测对象的原型链,只会检测当前对象本身,只有当前对象本身存在该属性时才返回 true。

例如,在下面自定义类型中,this.name 就表示对象的自有属性,而原型对象中的 name 属性就是继承属性。

function F() { //自定义数据类型
  this.name = "自有属性";
}
F.prototype.name = "继承属性";

hasOwnProperty() 的语法格式如下:

object.hasOwnProperty(propertyName);

参数说明:propertyName 参数表示要检测的属性名称。

返回值:返回一个布尔值。如果 propertyName 是自有属性,那么返回 true,否则返回 false。

示例1

针对上面的自定义类型,可以实例化对象,然后判定当前对象调用的属性 name 是什么类型。

var f = new F(); //实例化对象
console.log(f.hasOwnProperty("name")); //返回true,说明当前调用的 name是自有属性
console.log(f.name); //返回字符串“自有属性”

凡是构造函数的原型属性(原型对象包含的属性),都是继承属性,使用 hasOwnProperty() 方法检测时,都会返回 false。但是,对于原型对象本身来说,这些原型属性又是原型对象的自有属性,所以返回值又是 true。

示例2

在下面示例中,演示了 toString() 方法对于 Date 对象来说是继承属性,但是对于 Date 构造函数的原型对象来说,则是它的自有属性。

var d = Date;
console.log(d.hasOwnProperty("toString")); //返回false,说明toString()是Date的自有属性
var d = Date.prototype;
console.log(d.hasOwnProperty("toString")); //返回true,说明toString()是Date.prototype属性

hasOwnProperty() 方法只能判断指定对象中是否包含指定名称的属性,无法检查对象原型链中是否包含某个属性,所以能够检测出来的属性必须是对象成员。

示例3

下面示例演示了 hasOwnProperty() 方法所能检测的属性范围。

var o = { //对象直接量
  o1 : { //子对象直接量
    o2 : { //孙子对象直接量
      name : 1 //孙子对象直接量的属性
    }
  }
};
console.log(o.hasOwnProperty("o1")); //返回true,说明o1是o的自有属性
console.log(o.hasOwnProperty("o2")); //返回false,说明o2不是o的自有属性
console.log(o.o1.hasOwnProperty("o2")); //返回true,说明o2是o1的自有属性
console.log(o.o1.hasOwnProperty("name")); //返回false,说明name不是o1的自有属性
console.log(o.o1.hasOwnProperty("name")); //返回true,说明name不是o2的自有属性

到此这篇关于JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法的文章就介绍到这了,更多相关JS hasOwnProperty 内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 问题内容: 哪种方法可以更好地检查属性是否存在? Jarret Hardie提供了以下答案: 我看到它也可以通过以下方式完成: 一种方法通常比其他方法使用更多吗? 问题答案: 没有“最佳”方法, 因为您永远不会仅仅检查属性是否存在;它始终是某些较大程序的一部分。有几种正确的方法,一种值得注意的不正确的方法。 这是演示此技术失败的演示: 输出: 大多数情况下,您不想惹恼。这是用于执行特殊操作的特殊属

  • 本文向大家介绍判断JS对象是否拥有某属性的方法推荐,包括了判断JS对象是否拥有某属性的方法推荐的使用技巧和注意事项,需要的朋友参考一下 两种方式,但稍有区别 1,in 运算符 可看到无论是name,还是原形链上的toString,都能检测到返回true。 2,hasOwnProperty 方法 原型链上继承过来的属性无法通过hasOwnProperty检测到,返回false。 需注意的是,虽然in

  • 本文向大家介绍用js写一个方法检测浏览器是否支持css3的属性相关面试题,主要包含被问及用js写一个方法检测浏览器是否支持css3的属性时的应答技巧和注意事项,需要的朋友参考一下 var div = document.createElement('div'); console.log(div.style.transition); //如果支持的话, 会输出 "" //如果不支持的话, 会输出 un

  • 本文向大家介绍JS Testing Properties 判断属性是否在对象里的方法,包括了JS Testing Properties 判断属性是否在对象里的方法的使用技巧和注意事项,需要的朋友参考一下 Testing Properties To check whether an object has a property with a given name. You can do this wi

  • 问题内容: 如问题标题所述,是否存在通过 对象 属性循环的小胡子/把手方式? 所以用 然后我可以 在模板引擎 中做一些等效于 ? 问题答案: 自车把1.0rc1起的内置支持 此功能的支持已添加到Handlebars.js,因此不再需要外部帮助器。 如何使用它 对于数组: 对于对象: 请注意,将仅枚举通过测试的属性。

  • 这里有几个关于如何检查对象中是否存在属性的答案。 我一直在使用 但我想知道这和