为了判断一个对象是否包含自定义属性而不是原型链上的属性, 我们需要使用继承自 Object.prototype 的 hasOwnProperty 方法。
注意: 通过判断一个属性是否 undefined 是不够的。 因为一个属性可能确实存在,只不过它的值被设置为 undefined。
hasOwnProperty 是 JavaScript 中唯一一个处理属性但是不查找原型链的函数。
// 修改Object.prototypeObject.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函数方法是返回一个布尔值,指出一个对象是否具有指定名称的属性。 hasOwnProperty()使用方法: object.hasOwnProperty(proName)其中参数object是必选项。一个对象的实例。proName是必...
JavaScript中的`hasOwnProperty()`函数是用于检测对象是否在其自身的属性列表中包含某个特定的属性,而不考虑该属性是否存在于原型链上。这个方法是Object对象的一个内置方法,因此所有JavaScript对象(除了null)都...
JavaScript中hasOwnProperty函数方法是返回一个布尔值,指出一个对象是否具有指定名称的属性。 使用方法:object.hasOwnProperty(proName) 其中参数object是必选项。一个对象的实例。proName是必选项。一个属性名称...
在这种情况下,需要使用外部的 hasOwnProperty 函数来获取正确的结果。 var foo = { hasOwnProperty: function() { return false; }, bar: 'Here be dragons' }; foo.hasOwnProperty('bar'); // 始终返回 false...
hasOwnProperty() 方法用来判断某个对象是否含有指定的自身属性。 语法 obj.hasOwnProperty(prop) 参数 •prop •要检测的属性名称。 描述 所有继承了 Object.prototype 的对象都会从原型链上继承到 ...
需要注意的是,对于siteAdmin的原型对象调用hasOwnProperty("showAdmin")返回true,这是因为showAdmin是这个原型对象自身的一个属性,但siteAdmin.prototype.hasOwnProperty("siteUrl")返回false,因为siteUrl是在...
if (data.hasOwnProperty(key)) { $('#output').append('<p>' + key + ': ' + data[key] + '</p>'); } } }, error: function(jqXHR, textStatus, errorThrown) { console.error('请求失败:', textStatus, ', ...
在JavaScript中,`in`操作符和`hasOwnProperty()`方法都是用来检查对象是否拥有特定的属性,但它们之间存在显著的差异。理解这些差异对于精确地处理对象的属性至关重要。 首先,`in`操作符的工作原理是遍历对象及其...
JavaScript中的hasOwnProperty方法是一个非常实用的内置对象方法,用于检查对象是否包含特定的自身属性(不包括从原型链继承的属性)。当我们需要遍历一个对象的所有属性时,通常会使用for...in循环。然而,使用for....
// 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')...hasOwnProperty 作为
js-Polyfill_Object-...//Polyfilled & Native:console.dir([obj1.hasOwnProperty('a'),//trueobj1.hasOwnProperty('b'),//trueobj1.hasOwnProperty('c'),//falseobj2.hasOwnProperty('a'),//trueobj2.hasOwnProperty
在这段代码中,我们首先定义了一个构造函数`Person`,并通过`prototype`为所有`Person`实例定义了一个共有的属性`name`。创建一个`Person`的新实例后,我们尝试检查属性`name`是否存在于`person`对象中。开始时,`...
在JavaScript编程中,`for...in`循环和`hasOwnProperty`方法是两个非常重要的概念,它们主要用于遍历和检查对象的属性。`for...in`循环遍历的是对象及其原型链上的可枚举属性,而`hasOwnProperty`方法则用于确定对象...
为了确保安全,开发者应当在回调函数内部使用`hasOwnProperty`方法来检查属性是否属于目标对象自身,而不是从原型继承来的。 总结,`jQuery.each`函数是jQuery库中的一个重要组成部分,它允许开发者高效且灵活地...
在JavaScript中,获取对象属性的方法主要有两种:`in`运算符和`hasOwnProperty()`方法。它们之间存在着明显的差异,理解这些差异对于编写高效且准确的JavaScript代码至关重要。 首先,`in`运算符用于检查给定的对象...
回调函数内部,`slice(0, index)` 创建了一个从数组开始到当前索引(不包括当前索引)的新数组,然后我们用这个新数组调用`hasOwnProperty()`,检查当前元素在之前的位置是否存在。如果不存在,`hasOwnProperty()` ...
在上面的代码中,`saveObj`函数接收一个值`val`,并检查`data`对象是否已经拥有这个属性。如果存在,就从缓存中直接读取数据;如果不存在,就发起一个AJAX请求获取新的数据并将其存入缓存。 关于内存占用的担忧,...
- `hasOwnProperty()`: 检查对象是否具有指定的自身属性,而非来自原型链。 - `JSON.stringify()`: 将JavaScript值转换为JSON字符串。 6. **异步编程**: - `Promise`: 用于异步计算的构造函数,代表一个可能...