判断一个属性是定义在对象本身而不是继承自原型链,我们需要使用从Object.prototype继承而来的hasOwnProperty方法。hasOwnProperty方法是Javascript中唯一一个处理对象属性而不会往上遍历原型链的。
// Poisoning Object.prototypeObject.prototype.bar = 1;var foo = {goo: undefined};foo.bar; // 1'bar' in foo; // truefoo.hasOwnProperty('bar'); // falsefoo.hasOwnProperty('goo'); // true

在这里,只有 hasOwnProperty 能给出正确答案,这在遍历一个对象的属性时是非常必要的。Javascript 中没有其他方法能判断一个属性是定义在对象本身还是继承自原型链。

hasOwnProperty 作为属性

Javascript 并未将 hasOwnProperty 设为词,这意味着你可以拥有一个命名为 hasOwnProperty 的属性。这个时候你无法再使用本身的 hasOwnProperty 方法来判断属性,所以你需要使用外部的 hasOwnProperty 方法来进行判断。

var foo = { hasOwnProperty: function() { return false; }, bar: 'Here be dragons'};foo.hasOwnProperty('bar'); // always returns false// Use another Object's hasOwnProperty and call it with 'this' set to foo({}).hasOwnProperty.call(foo, 'bar'); // true// It's also possible to use hasOwnProperty from the Object// prototype for this purposeObject.prototype.hasOwnProperty.call(foo, 'bar'); // true

总结

当判断对象属性存在时,hasOwnProperty 是唯一可以依赖的方法。这里还要提醒下,当我们使用 for in loop 来遍历对象时,使用 hasOwnProperty 将会很好地避免来自原型对象扩展所带来的困扰。

最新资讯
摘掉“金融”帽子的优信 背水一战能否解决亏损问题

摘掉“金融”帽子的优

近日,优信创始人、董事长兼CEO戴琨对外宣布,该公司已经
传捷信将员工输送到美团送外卖、还得穿工装 回应:消息不实

传捷信将员工输送到美

近日,有网友爆料称,由于受到疫情及监管影响,捷信消费有限
腾讯QQ上线青少年模式 减少对学习干扰降低社交风险

腾讯QQ上线青少年模式

QQ新版本近期上线,QQ青少年模式在原有的学习模式基础上
因公司未履行指定义务 乐视网原董事长刘淑青被限制高消费

因公司未履行指定义务

天眼查App显示,近日,乐视网信息技术(北京)股份有限公司原
58同城宣布完成与Quantum Bloom的私有化合并

58同城宣布完成与Quan

市场消息称,58同城宣布完成与Quantum Bloom的私有化合
京东健康计划本月在港IPO 刘强东变身IPO收割机

京东健康计划本月在港

9月18日消息,京东旗下超级独角兽——京东健康计划最早
最新文章
详解Vue的ref特性的使用

详解Vue的ref特性的使

这篇文章主要介绍了详解Vue的ref特性的使用,文中通过
vue学习笔记之slot插槽基本用法实例分析

vue学习笔记之slot插

这篇文章主要介绍了vue学习笔记之slot插槽基本用法,结
vue跳转方式(打开新页面)及传参操作示例

vue跳转方式(打开新页

这篇文章主要介绍了vue跳转方式(打开新页面)及传参操作,
vue学习笔记之过滤器的基本使用方法实例分析

vue学习笔记之过滤器

这篇文章主要介绍了vue学习笔记之过滤器的基本使用方
js获取本日、本周、本月的时间代码

js获取本日、本周、本

本篇文章给大家分享的内容是利用js如何获取本日、本周
node crawler如何添加promise支持

node crawler如何添加

这篇文章主要介绍了node crawler如何添加promise支持,