我在以下代码中遇到此异常:TypeError:无法读取 财产' toString'未定义的
for (var key in obj) {
var val = obj[key];
var s = val.toString();
}
如何在此代码中未定义val?
我没有实际数据的日志,因此我不确定obj中的内容,但它是由JSON构建的,我没有输入JSON。
这是实际的完整代码:
function deepMatchKeyword(obj, keyword) {
for (var key in obj) {
var val = obj[key];
if (typeof val == 'object' && !(val instanceof Array)) {
if (deepMatchKeyword(val, keyword))
return true;
} else {
var s = val.toString();
if (s.toLowerCase().includes(keyword))
return true;
}
}
return false;
}
答案 0 :(得分:2)
如何在此代码中未定义val?
很容易。 undefined
是一个与任何其他值相同的值,可以分配给属性。
for ... in
处理可枚举属性,而不仅仅是具有已定义值的属性。
var obj = {
someProperty: undefined
};
for (var key in obj) {
var val = obj[key];
var s = val.toString();
}
答案 1 :(得分:0)
在属性中包含hasOwnProperty检查循环是非常常见的,以避免从对象的原型链继承的可枚举属性。
3 posts from Users1
3 posts from Users2