JavaScript hasOwnProperty() 方法详解:语法、用法与注意事项

作者:半夏

时间:2026-10-29

浏览:404

本文详细介绍 JavaScript 中 hasOwnProperty() 方法的用法。该方法用于检测对象是否包含指定的自身属性,忽略原型链上的继承属性。文章涵盖语法、参数说明,并通过多个示例演示如何区分自身属性与继承属性、遍历对象属性,以及处理方法被遮蔽时的安全调用方式。

文章目录

hasOwnProperty() 方法概述与语法

概述

hasOwnProperty() 是 JavaScript 对象的一个内置方法,主要用于判断指定对象是否包含某个特定的自身属性。

语法格式如下: obj.hasOwnProperty(prop)

参数说明

prop

需要检测的属性名称,通常以字符串形式传入。

描述

所有继承自 Object.prototype 的对象都会拥有 hasOwnProperty 方法。该方法的核心作用是检测对象自身是否拥有特定属性,这与 in 运算符不同,因为 in 运算符会同时检查原型链上的属性,而 hasOwnProperty 仅关注对象自身的属性,忽略从原型链继承来的属性。

hasOwnProperty() 实际应用示例

示例

例1:使用 hasOwnProperty 判断对象是否含有特定自身属性

以下代码演示了如何检测对象 o 是否包含自身属性 prop:

代码如下:

o = new Object();o.prop = 'exists';function changeO() {
o.newprop = o.prop;
delete o.prop;}o.hasOwnProperty('prop');
// 返回 true
changeO();
o.hasOwnProperty('prop');
// 返回 false

例2:区分自身属性与继承属性

以下示例展示了 hasOwnProperty 方法在处理自身属性和继承属性时的不同行为:

代码如下:

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

例3:遍历对象所有自身属性

以下示例演示了在遍历对象所有属性时,如何利用 hasOwnProperty 忽略继承属性。需要注意的是,for...in 循环默认只遍历可枚举属性,这通常符合需求。若需获取所有属性(包括不可枚举的),可直接使用 Object.getOwnPropertyNames() 方法。

代码如下:

var buz = {
fog: 'stack'};
for (var name in buz) {
if (buz.hasOwnProperty(name)) {
alert("this is fog (" + name + ") for sure. Value: " + buz[name]);
    }
else {
alert(name);
// toString or something else
         }}

注意事项:方法被遮蔽的处理

例4:hasOwnProperty 方法可能被遮蔽的情况

如果对象自身定义了一个名为 hasOwnProperty 的属性或方法,它会遮蔽原型链上的同名方法,导致调用结果异常:

代码如下:

var foo = {
hasOwnProperty: function() {
return false;
    },
bar: 'Here be dragons'};foo.hasOwnProperty('bar');
// 始终返回 false
// 若担心此类遮蔽情况,建议直接使用原型链上的原始 hasOwnProperty 方法
({}).hasOwnProperty.call(foo, 'bar');
// true
Object.prototype.hasOwnProperty.call(foo, 'bar');
// true

以上即为 JavaScript 中 hasOwnProperty() 方法的完整使用说明。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章