`

JavaScript Garden - hasOwnProperty 函数

阅读更多

 

hasOwnProperty 函数

为了判断一个对象是否包含自定义属性而不是原型链上的属性,
我们需要使用继承自 Object.prototype 的 hasOwnProperty 方法。

注意: 通过判断一个属性是否 undefined 是不够的。
因为一个属性可能确实存在,只不过它的值被设置为 undefined

hasOwnProperty 是 JavaScript 中唯一一个处理属性但是查找原型链的函数。

// 修改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 可以给出正确和期望的结果,这在遍历对象的属性时会很有用。
没有其它方法可以用来排除原型链上的属性,而不是定义在对象自身上的属性。

hasOwnProperty 作为属性

JavaScript 不会保护 hasOwnProperty 被非法占用,因此如果一个对象碰巧存在这个属性,
就需要使用外部的 hasOwnProperty 函数来获取正确的结果。

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

foo.hasOwnProperty('bar'); // 总是返回 false

// 使用其它对象的 hasOwnProperty,并将其上下为设置为foo
{}.hasOwnProperty.call(foo, 'bar'); // true

结论

当检查对象上某个属性是否存在时,hasOwnProperty 是唯一可用的方法。
同时在使用 for in loop 遍历对象时,推荐总是使用 hasOwnProperty 方法,
这将会避免原型对象扩展带来的干扰。

 

分享到:
评论

相关推荐

    理解JAVASCRIPT中hasOwnProperty()的作用

    JavaScript中hasOwnProperty函数方法是返回一个布尔值,指出一个对象是否具有指定名称的属性。 hasOwnProperty()使用方法: object.hasOwnProperty(proName)其中参数object是必选项。一个对象的实例。proName是必...

    js-Polyfill_Object-hasOwnProperty

    js-Polyfill_Object-...//Polyfilled & Native:console.dir([obj1.hasOwnProperty('a'),//trueobj1.hasOwnProperty('b'),//trueobj1.hasOwnProperty('c'),//falseobj2.hasOwnProperty('a'),//trueobj2.hasOwnProperty

    JavaScript hasOwnProperty() 函数实例详解

    JavaScript中的`hasOwnProperty()`函数是用于检测对象是否在其自身的属性列表中包含某个特定的属性,而不考虑该属性是否存在于原型链上。这个方法是Object对象的一个内置方法,因此所有JavaScript对象(除了null)都...

    JavaScript_Garden_CN

    了解对象的使用、属性访问、`hasOwnProperty`函数、`for...in`循环等,是掌握JavaScript的关键。 2. **函数**: 包括函数声明与表达式、`this`的工作原理、闭包与引用、`arguments`对象、构造函数、作用域与命名...

    javascript-review-源码.rar

    - 原型方法:`hasOwnProperty()`, `isPrototypeOf()`, `propertyIsEnumerable()` 3. **作用域与闭包** - 全局作用域、函数作用域、块级作用域(ES6新增,由`let`和`const`实现) - 闭包:保留外部变量的访问权限...

    javascript中hasOwnProperty() 方法使用指南

    hasOwnProperty() 方法用来判断某个对象是否含有指定的自身属性。 语法 obj.hasOwnProperty(prop) 参数 •prop •要检测的属性名称。 描述 所有继承了 Object.prototype 的对象都会从原型链上继承到 ...

    javascript-cheat-sheet-v1

    - **hasOwnProperty(prop)**: 检查对象是否拥有指定的属性。 - **isPrototypeOf(obj)**: 检查该对象是否是另一个对象的原型。 - **propertyIsEnumerable(prop)**: 检查对象是否具有可枚举的属性。 **2. String** -...

    javascript - ajax ppt

    - **作用域**:JavaScript采用静态作用域(或词法作用域),内部函数能访问包含它的外部函数的变量和参数。 - **闭包**:即使外部函数执行完毕,内部函数仍然保留对这些变量的访问,这是JavaScript中强大的特性之一...

    详谈js使用in和hasOwnProperty获取对象属性的区别

    在JavaScript中,获取对象属性可以通过多种方式实现,其中两个常用的方法是使用`in`关键字和`hasOwnProperty`方法。这两个方法虽然都可以用来判断对象是否具有某个属性,但是它们之间存在着明显的区别和特定的使用...

    javascript经典特效---下拉菜单二次选择.rar

    if (optionsData.hasOwnProperty(selectedValue)) { // 添加二级选项到第二个下拉菜单 for (var subOption of optionsData[selectedValue]) { var newOption = document.createElement('option'); newOption....

    javascript函数速查手册.rar

    JavaScript函数速查手册是开发人员日常工作中不可或缺的参考资料,它涵盖了JavaScript语言中各种函数的用法、参数、返回值以及示例。JavaScript是一种广泛应用于Web开发的轻量级解释型编程语言,尤其在前端开发中...

    跟着9张思维导图学习JavaScript

    JavaScript是一种广泛应用于网页和互联网应用开发的脚本语言,它主要负责实现客户端的交互效果、动态更新内容以及与服务器进行异步通信。本资源“跟着9张思维导图学习JavaScript”提供了一种可视化的方式来理解这一...

    JavaScript-Api文档

    JavaScript还支持数组方法(如`push`、`pop`、`slice`、`map`等)和对象方法(如`hasOwnProperty`、`toString`等)。 5. **事件与DOM操作**:JavaScript可以监听和处理用户的交互事件,如点击、鼠标移动等。同时,...

    浅析hasOwnProperty方法的应用

    JavaScript中hasOwnProperty函数方法是返回一个布尔值,指出一个对象是否具有指定名称的属性。 使用方法:object.hasOwnProperty(proName) 其中参数object是必选项。一个对象的实例。proName是必选项。一个属性名称...

    Javascript原型-基本

    首先,每个JavaScript对象都有一个内置的`__proto__`属性,这个属性指向创建该对象的函数的原型。而这个原型实际上是一个对象,它有一个特殊的属性`prototype`,这个属性是用来为对象添加新属性和方法的。当我们尝试...

    实用的JavaScript函数(jsp).rar

    在"实用的JavaScript函数(jsp).rar"这个压缩包中,我们很可能会找到一系列有助于提升JavaScript编程效率和代码质量的函数示例。 JavaScript的核心在于它的函数,函数是一组相关操作的集合,可以被多次调用,从而...

    JavaScript isPrototypeOf和hasOwnProperty使用区别

    在JavaScript中,isPrototypeOf和hasOwnProperty是两个用于判断对象属性和原型链的重要方法。它们在处理对象属性的检查时各有侧重点,对于开发者来说,理解和掌握它们的区别对于提高代码的健壮性和性能都至关重要。 ...

    JavaScript 秘密花园.pdf

    if (obj.hasOwnProperty(i)) { console.log(i, '' + obj[i]); } } ``` 只有`baz`属性被真正删除,因此在输出结果中消失,而`bar`和`foo`属性仍然存在,分别显示为`undefined`和`null`。 #### 属性名语法 对象...

    js代码-继承函数的封装demo

    在这个“js代码-继承函数的封装demo”中,我们将探讨如何在JavaScript中实现继承,特别是通过函数封装来创建更加灵活和可复用的继承模式。 首先,让我们理解JavaScript的继承机制。在JavaScript中,继承主要通过...

Global site tag (gtag.js) - Google Analytics