原因不明的Javascript错误

时间:2017-02-14 12:00:22

标签: javascript

我在以下代码中遇到此异常: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;
}

2 个答案:

答案 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

参见例如for..in and hasOwnProperty