Javascript学习笔记之 对象篇(三) : hasOwnProperty_基础知识
程序员文章站
2022-05-27 13:54:29
...
// 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 将会很好地避免来自原型对象扩展所带来的困扰。
推荐阅读
-
【学习笔记】第三方登录之GitHub篇
-
Java学习笔记十八:Java面向对象的三大特性之封装
-
前端笔记之JavaScript面向对象(三)初识ES6&underscore.js&EChart.js&设计模式&贪吃蛇开发
-
Java学习笔记二十一:Java面向对象的三大特性之继承
-
JavaScript学习笔记(三)——对象
-
我的javascript学习之路(三) 对象之this
-
javascript学习笔记(三)显示当时时间的代码_基础知识
-
javascript 学习笔记(八)javascript对象_基础知识
-
javascript学习笔记(十) js对象 继承_基础知识
-
Javascript学习笔记之 对象篇(四) : for in 循环_基础知识