obj.hasOwnProperty(key)什么意思
时间: 2024-03-11 11:48:28 浏览: 16
在JavaScript中,hasOwnProperty()方法是一个对象方法,用于判断某个属性是否是对象本身的属性,而不是从原型链上继承来的属性。hasOwnProperty()方法返回一个布尔值,如果对象拥有指定的属性,返回true,否则返回false。
在使用for-in循环遍历对象时,为了避免遍历到从原型链上继承来的属性,可以使用hasOwnProperty()方法来进行过滤。例如:
```javascript
var obj = {a: 1, b: 2};
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(key + " = " + obj[key]);
}
}
```
输出结果为:
```
a = 1
b = 2
```
如果不使用hasOwnProperty()方法进行过滤,输出结果将会包括从原型链上继承来的属性,例如:
```javascript
Object.prototype.c = 3; // 在原型链上添加属性
var obj = {a: 1, b: 2};
for (var key in obj) {
console.log(key + " = " + obj[key]);
}
```
输出结果为:
```
a = 1
b = 2
c = 3
```
可以看到,由于c属性是从原型链上继承来的,它也被遍历出来了。因此,在使用for-in循环遍历对象时,最好使用hasOwnProperty()方法来过滤掉从原型链上继承来的属性。
相关问题
js中的hasOwnProperty(key)
`hasOwnProperty(key)` 是 JavaScript 中的一个对象方法,用于检查一个对象是否具有指定的属性(key)。它返回一个布尔值,如果对象拥有该属性,则返回 true,否则返回 false。
这个方法只检查对象自身的属性,不会检查原型链上的属性。换句话说,它只会在对象本身的属性中查找,而不会查找继承的属性。
以下是 `hasOwnProperty(key)` 的示例用法:
```javascript
const obj = {
name: 'John',
age: 25
};
console.log(obj.hasOwnProperty('name')); // true
console.log(obj.hasOwnProperty('age')); // true
console.log(obj.hasOwnProperty('gender')); // false
```
在上面的示例中,`obj` 对象具有 `name` 和 `age` 属性,所以 `obj.hasOwnProperty('name')` 和 `obj.hasOwnProperty('age')` 都返回 true。然而,`obj` 对象没有 `gender` 属性,所以 `obj.hasOwnProperty('gender')` 返回 false。
for (var key in rules) { var rule = formatRule(rules[key]); var has = obj.hasOwnProperty(key); if (!has) { if (rule.required !== false) { errors.push({ message: this.t('required'), field: key, code: this.t('missing_field') }); } continue; } var checker = TYPE_MAP[rule.type]; if (!checker) { throw new TypeError('rule type must be one of ' + Object.keys(TYPE_MAP).join(', ') + ', but the following type was passed: ' + rule.type); }checker为什么是undefined
`checker` 变量为 `undefined` 是因为在 `TYPE_MAP` 对象中没有定义 `rule.type` 属性对应的值。在这段代码中,`TYPE_MAP` 是一个对象,应该包含不同类型的检查器函数,例如:
```javascript
const TYPE_MAP = {
string: checkString,
number: checkNumber,
boolean: checkBoolean,
array: checkArray,
object: checkObject,
email: checkEmail,
url: checkUrl,
date: checkDate,
int: checkInt,
float: checkFloat
};
```
如果 `rule.type` 是上述类型之一,那么 `TYPE_MAP[rule.type]` 将返回对应的检查器函数。否则,将抛出一个类型错误异常。因此,需要检查 `rule.type` 是否正确地定义在了 `TYPE_MAP` 对象中。