细说JavaScript对象(3):hasOwnProperty
JavaScript对象 细说
2023-09-14 08:57:26 时间
判断一个属性是定义在对象本身而不是继承自原型链,我们需要使用从 Object.prototype 继承而来的 hasOwnProperty 方法。
hasOwnProperty 方法是 JavaScript 中唯一一个处理对象属性而不会往上遍历原型链的。
// Poisoning Object.prototype Object.prototype.bar = 1; var foo = { goo: undefined }; foo.bar; // 1 'bar' in foo; // true foo.hasOwnProperty('bar'); // false foo.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 purpose Object.prototype.hasOwnProperty.call(foo, 'bar'); // true
总结
当判断对象属性存在时,hasOwnProperty 是唯一可以依赖的方法。这里还要提醒下,当我们使用 for in loop 来遍历对象时,使用 hasOwnProperty 将会很好地避免来自原型对象扩展所带来的困扰。
参考
http://segmentfault.com/blog/stephenlee/1190000000480531
http://bonsaiden.github.io/JavaScript-Garden/#object.hasownproperty
延伸阅读:
相关文章
- JavaScript对象访问器属性
- 关于javascript字符串连接性能
- JavaScript多个h5播放器video,点击一个播放其他暂停
- javascript显示年月日时间代码显示电脑时间
- 第一百二十二节,JavaScript表单处理
- JavaScript Date 对象
- [Javascript] Joi for validation
- [Javascript] Implement zip function
- JavaScript 本地对象、内置对象、宿主对象
- JavaScript Date 对象
- [Testing] JavaScript Mocking Fundamentals
- [Javascript] Proper use of console.assert in JavaScript
- javascript:监控video全屏时取消静音(chrome 107.0.5304.87)
- 使用Cordova将您的前端JavaScript应用打包成手机原生应用
- TypeScript输入参数的默认值一例,以及对应生成的JavaScript代码分析
- JavaScript实现的水珠动画效果
- JavaScript学习总结(一)——ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
- JavaScript开发规范要求