if语句- javascript函数中的意外类型错误

if statement - Unexpected TypeError in a javascript function

本文关键字:意外 类型 错误 函数 语句 javascript if      更新时间:2023-09-26

目标:编写一个函数,确定一个对象数组是否包含一个给定字段的给定值的对象。如果存在该对象则返回该对象,否则返回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值。如果有人能解释一下这个错误,我将不胜感激。

谢谢。

变化

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

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

使用<=将超出数组的边界。

jsFiddle演示

这是因为您应该将代码更改为for(var i=0; i < arr.length; i++){:因为数组长度= arr。长度,最后一个元素索引是arr。长度- 1,得到arr[arr]