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
时间: 2024-02-03 19:03:03 浏览: 22
`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` 对象中。
相关问题
var obj in imageTargetName.Where(obj => !imageTargetDic.ContainsKey(obj.Key))
这是一个使用LINQ查询语法的代码片段。假设`imageTargetName`是一个集合,`imageTargetDic`是一个字典,你想从`imageTargetName`中找出那些在`imageTargetDic`中不存在键的对象。
代码中的`var obj in imageTargetName`是一个迭代器,用于遍历`imageTargetName`集合中的每个元素。然后,通过`Where`方法结合Lambda表达式进行筛选,判断条件为在`imageTargetDic`中不包含当前元素的键。
最终,该代码返回一个新的集合,其中包含满足筛选条件的元素。
obj.hasOwnProperty(key)什么意思
在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()方法来过滤掉从原型链上继承来的属性。