javascript函数中出现意外的TypeError

时间:2012-12-30 17:59:39

标签: javascript if-statement typeerror

目标:编写一个函数,确定对象数组是否包含给定字段的给定值的对象。如果有这样的对象,则返回该对象,否则返回false。

代码

var data = [
    {isle: 'VF', item: 'Ginger'},
    {isle: 'VF', item: 'Spinach'},
    {isle: 'Dairy', item: 'Milk'},
    {isle: 'Dairy', item: 'Yogurt'}
];

var objwithPropvalueInarr = function(propname, propvalue, arr){
    for(var i=0; i <= arr.length; i++){
        if (arr[i][propname] === propvalue) {
            // console.log('Found object with value ' + propvalue);
            return arr[i];
        }
    };
    return false;
};

我在Google Chrome控制台中输入了上述代码。以下对该函数的调用有效:

objwithPropvalueInarr('isle', 'VF', data)

上面一行按预期返回data[0]

但是,以下调用返回TypeError(在调用后显示)

objwithPropvalueInarr('isle', 'nonexistentpropvalue', data)

TypeError: Cannot read property 'isle' of undefined
arguments: Array[2]
get message: function () { [native code] }
get stack: function () { [native code] }
set message: function () { [native code] }
set stack: function () { [native code] }
type: "non_object_property_load"
__proto__: Error

data[0]['isle'] === 'nonexistentpropvalue'按预期返回false。如果函数中的if条件不会为每个检查返回false,那么最后会返回false值。如果有人能解释错误,将不胜感激。

谢谢。

2 个答案:

答案 0 :(得分:3)

更改

for(var i = 0; i <= arr.length; i++) {

for (var i = 0; i < arr.length; i++) {

使用<=将超出数组的范围。

jsFiddle Demo

答案 1 :(得分:0)

这是因为您应该将代码更改为for(var i=0; i < arr.length; i++){:由于数组长度= arr.length,最后一个元素索引是arr.length - 1,因此您只需将arr [arr.length]作为空对象。< / p>