js属性对象的hasOwnProperty方法

object的 hasOwnPropetry 方法返回一个布尔值 ,判断对象是否包含特定的自身(非继承)属性。

所有继承了 Object 的对象都会继承到 hasOwnProperty 方法。这个方法可以用来检测一个对象是否含有特定的自身属性;和 in 运算符不同,该方法会忽略掉那些从原型链上继承到的属性。

即使属性的值是 null 或 undefined,只要属性存在,hasOwnProperty 依旧会返回 true

下面的例子检测了对象 o 是否含有自身属性 prop

o = new Object();
o.hasOwnProperty(‘prop‘); // 返回 false
o.prop = ‘exists‘;
o.hasOwnProperty(‘prop‘); // 返回 true
delete o.prop;
o.hasOwnProperty(‘prop‘); // 返回 false

下面的例子演示了 hasOwnProperty 方法对待自身属性和继承属性的区别:

o = new Object();
o.prop = ‘exists‘;
o.hasOwnProperty(‘prop‘);             // 返回 true
o.hasOwnProperty(‘toString‘);         // 返回 false
o.hasOwnProperty(‘hasOwnProperty‘);   // 返回 false

下面的例子演示了如何在遍历一个对象的所有属性时忽略掉继承属性,注意这里 for...in  循环只会遍历可枚举属性,所以不应该基于这个循环中没有不可枚举的属性而得出 hasOwnProperty 是严格限制于可枚举项目的(如同 Object.getOwnPropertyNames())。

var buz = {
  fog: ‘stack‘
};

for (var name in buz) {
  if (buz.hasOwnProperty(name)) {
    console.log(‘this is fog (‘ +
      name + ‘) for sure. Value: ‘ + buz[name]);
  }
  else {
    console.log(name); // toString or something else
  }
}

JavaScript 并没有保护 hasOwnProperty 这个属性名,因此,当某个对象可能自有一个占用该属性名的属性是,就需要使用外部的 hasOwnProperty 获得正确的结果:

var foo = {
  hasOwnProperty: function() {
    return false;
  },
  bar: ‘Here be dragons‘
};

foo.hasOwnProperty(‘bar‘); // 始终返回 false

// 如果担心这种情况,
// 可以直接使用原型链上真正的 hasOwnProperty 方法
({}).hasOwnProperty.call(foo, ‘bar‘); // true

// 也可以使用 Object 原型上的 hasOwnProperty 属性
Object.prototype.hasOwnProperty.call(foo, ‘bar‘); // true

注意,只有在最后一种情况下,才不会新建任何对象。

原文地址:https://www.cnblogs.com/buxiugangzi/p/12143493.html

时间: 2024-10-09 07:57:48

js属性对象的hasOwnProperty方法的相关文章

js【Object.prototype.hasOwnProperty()方法】

概述 hasOwnProperty() 方法用来判断某个对象是否含有指定的自身属性. 语法 obj.hasOwnProperty(prop) 参数 prop 要检测的属性名称. 描述 所有继承了 Object.prototype 的对象都会从原型链上继承到 hasOwnProperty 方法,这个方法可以用来检测一个对象是否含有特定的自身属性,和 in 运算符不同,该方法会忽略掉那些从原型链上继承到的属性. 示例 例1:使用 hasOwnProperty 方法判断某对象是否含有特定的自身属性 下

161227、js显示对象所有属性和方法的函数

要想看到实际效果,可以先声明一些属性跟方法,否则是看不到,仔细往下看有例子的. function ShowObjProperty(Obj) { var PropertyList=''; var PropertyCount=0; for(i in Obj){ if(Obj.i !=null) PropertyList=PropertyList+i+'属性:'+Obj.i+'\r\n'; else PropertyList=PropertyList+i+'方法\r\n'; } alert(Prope

JS中对象转数组方法总结

1.Array.from() 方法,用于数组的浅拷贝.就是将一个类数组对象或者可遍历对象转换成一个真正的数组.eg: let obj = { 0: 'nihao', 1: 'haha', 2: 'gansha', 'length': 3 } let arr = Array.from(obj) console.log(arr); tips: 1. object中必须有length属性,返回的数组长度取决于length长度         2.key 值必须是数值 2.Object.values(o

js获取对象位置的方法

scrollHeight: 获取对象的滚动高度. scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离 scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离 scrollWidth:获取对象的滚动宽度 offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度 offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置 offsetTop:获取对象相

JS获取对象长度的方法

对象数组是不可以用arr.length来获取长度的,如果需要长度的话,可以用这个方法: var num=0; //假设obj是一个对象数组 var obj={xxxxxxx}; 通过遍历对象的方法,每次遍历,num的值加1,遍历完了num的值就是对象的长度了. for(var i in obj){ num++; } return obj; 原文地址:https://www.cnblogs.com/xwenbin/p/10856869.html

判断对象属性的几种方法

function Person() { this.name = 'Lee'; this.age = 20; this.sayName = function() {console.log(this.name)}; } Person.prototype.height = 180; var p = new Person(); 判断属性 hasOwnProperty(property_name) 检测一个属性书否存在于实例中,如果是则返回true. p.hasOwnProperty("name"

[Effective JavaScript 笔记]第45条:使用hasOwnProperty方法以避免原型污染

之前的43条,44条讨论了属性的枚举,但都没有彻底地解决属性查找中原型污染的问题.看下面关于字典的一些操作 'zhangsan' in dict; dict.zhangsan; dict.zhangsan=22; js的对象操作总是经继承的方式工作的.即使是一个空的对象字面量也是继承了Object.protoype属性. var dict={}; 'zhangsan' in dict;//false 'lisi' in dict;//false 'wangwu' in dict;//false'

原生 JS 中对象相关 API 合集

https://juejin.im/entry/58f8a705a0bb9f0065a4cb20 原文链接:https://microzz.com/2017/04/20/jsobject/ 原生 JavaScript 中对象相关 API 合集 - 对象篇.现在 jQuery 已经没有那么有优势了,原生 JS 赶紧学起来... -- 由microzz分享 Microzz [email protected] 主页 文章 标签 GitHub 关于我 掘金专栏 SegmentFault Vue音乐播放器

原生JS中对象相关API合集

Object对象 生成实例对象 var o = new Object() 属性 Object.prototype //返回原型对象 方法 Object.keys(o) //遍历对象的可枚举属性 Object.getOwnPropertyName(o) //遍历对象不可枚举的属性 对象实例的方法 valueOf // 返回当前对象对应的值. toString // 返回当前对象对应的字符串形式. toLocaleString // 返回当前对象对应的本地字符串形式. hasOwnProperty