无法读取属性" indexOf'未定义的

时间:2017-08-17 19:02:57

标签: javascript jquery angularjs

我试图搜索某个值是否在数组中退出。我使用ui-select捕获值,我创建函数来验证值是否存在并且一切正常但控制台显示我很多次无法读取属性' indexOf'未定义的。

这里是用于捕获数据的选择代码

  <ui-select multiple ng-model="entrevistainicialModel.personalidad"
                           ng-disabled="false"
                           search-enabled="true"
                           append-to-body="true"
                           class="form-control ">
                    <ui-select-match placeholder="Comportamientos">
                        {{$item.comportamiento}}
                    </ui-select-match>
  <ui-select-choices repeat="multipleItem.idcomportamiento as multipleItem in datosJson[0].comportamientos | filter: $select.search">
                        {{multipleItem.comportamiento}}
                    </ui-select-choices>
                </ui-select>

这是带有函数

的复选框代码
<td class="text-center"><input type="checkbox" ng-checked="check(entrevistainicialModel.personalidad, 1)" value="1"></td>

这里是功能

        $scope.check = function (data, n) {
        if (data.indexOf(n) !== -1) {
            return true;
        } else {
            return false;
        }
    }

一切都很棒!只有控制台发送了很多次indexOf错误

2 个答案:

答案 0 :(得分:1)

如果您无法读取数据的indexOf,那是因为数据未定义。

我想说数据没有价值,所以它不能有像indexOf这样的方法。您可以这样检查:

console.log (typeof data);

在这里,您尝试读取数据中的值类型。如果结果未定义,则表示数据为空。

因此,您必须检查数据是否为空(未定义)。您可以这样检查:

$scope.check = function (data, n) {
    if (!data) {return;}      // If data is undefined return.
    if (data.indexOf(n) !== -1) {
        return true;
    } else {
        return false;
    }
}

答案 1 :(得分:0)

这是因为data包含undefined,因为你传递的是undefined或者其他地方你没有通过这种方法。根据您的代码,我可以说entrevistainicialModel.personalidad应使用arraystring进行初始化,或使用indexOf方法进行初始化,然后您将无法获得错误无法读取属性&#39; indexOf&#39;未定义的

否则你应该处理像(data || []).indexOf(...)

这样的场景