为什么它在数组之前显示未定义?

时间:2016-03-04 08:11:48

标签: javascript angularjs json

我正在使用角度js来阅读json。

但如果我使用“+ =”,它会显示未定义。

var text = '{ "employees" : [' +
'{ "firstName":"John" , "lastName":"Doe" },' +
'{ "firstName":"Anna" , "lastName":"Smith" },' +
'{ "firstName":"Peter" , "lastName":"Jones" } ]}';

var ojt= JSON.parse(text);

var moduleA = angular.module("ModuleA", []);
moduleA.controller("MsgController", function ($scope) {
    'use strict';
    for(var i=0; i<3; i++) {
    $scope.Message += ojt.employees[i].firstName;
    }
    });

结果如下:

    undefinedJohnAnnaPeter

出了什么问题?

4 个答案:

答案 0 :(得分:5)

Message未定义,然后您+=上有一些字符串,因此导致您的问题。事先将$scope.Message分配给空字符串以消除错误。

$scope.Message = ""
for(var i=0; i<3; i++) {
    $scope.Message += ojt.employees[i].firstName;
}

编辑:如果您想在每个名称后添加新行,请在名称之间添加\n

$scope.Message = ""
for(var i=0; i<3; i++) {
    $scope.Message += ojt.employees[i].firstName + "\n";
}

答案 1 :(得分:2)

您尚未初始化$scope.Message,因此在第一次迭代中,您在+=属性上使用undefined运算符。只需在循环之前将其初始化为空字符串:

    $scope.Message = '';
    for(var i=0; i<3; i++) {
        $scope.Message += ojt.employees[i].firstName;
    }

答案 2 :(得分:1)

我的猜测是变量$ scope.Message是未定义的

试试这个:

    var text = '{ "employees" : [' +
    '{ "firstName":"John" , "lastName":"Doe" },' +
    '{ "firstName":"Anna" , "lastName":"Smith" },' +
    '{ "firstName":"Peter" , "lastName":"Jones" } ]}';

    var ojt= JSON.parse(text);

    var moduleA = angular.module("ModuleA", []);
    moduleA.controller("MsgController", function ($scope) {
        'use strict';

        $scope.Message ='';
        for(var i=0; i<3; i++) {
        $scope.Message += ojt.employees[i].firstName;
        }
        });

答案 3 :(得分:0)

你在做什么就是创建一个新的String。而不是使用这个

var text = '{ "employees" : [' +
  '{ "firstName":"John" , "lastName":"Doe" },' +
  '{ "firstName":"Anna" , "lastName":"Smith" },' +
  '{ "firstName":"Peter" , "lastName":"Jones" } ]}';

你应该使用这个

var text = {
  "employees": [{
    "firstName": "John",
    "lastName": "Doe"
  }, {
    "firstName": "Anna",
    "lastName": "Smith"
  }, {
    "firstName": "Peter",
    "lastName": "Jones"
  }]
};

这将创建一个JSON,您可以通过点表示法(object.key)访问对象属性。

编辑:哦,哇,我完全没有看到你正在将你的字符串解析为JSON对象。对不起。在这种情况下,我的答案不是正确的,以满足您的问题。