Javascript:使用TypeError属性unfined来循环对象

时间:2017-06-09 17:58:20

标签: javascript arrays

我有一个名为xs的对象数组,存储名称

xs = [
    {name: "Peter"},
    {name: "Doe"},
    {name: "Parker"},
    {name: "John"}
];

我有一个函数setEmptyStr,如果变量未定义则返回空字符串

function setEmptyStr(v) {
  if(typeof v !== 'undefined'){
    return v;
  } else {
    return '';
  }
}

我尝试循环我的对象数组(长度超过它自己的数组),我的数组长度为4,我尝试5.我不想使用array.length;

for (var i = 0; i < 5; i++) {
    console.log(setEmptyStr(xs[i].name));
}

4个名称返回成功,因为它未定义。但第五是回归

  

TypeError属性&#39; name&#39;未定义。

>>Peter
>>Doe
>>Parker
>>John
  

未捕获的TypeError:无法读取属性&#39; name&#39;未定义的

我希望第5个返回一个空字符串。我怎样才能做到这一点?我的代码中是否有错误?

>>Peter
>>Doe
>>Parker
>>John
>>""

4 个答案:

答案 0 :(得分:0)

使用此:

&#13;
&#13;
xs = [
    {name: "Peter"},
    {name: "Doe"},
    {name: "Parker"},
    {name: "John"}
];

for (var i = 0; i < 5; i++) {
  console.log(setEmptyStr(xs[i] && xs[i].name));
}

function setEmptyStr(v) {
  if (typeof v !== 'undefined') {
    return v;
  } else {
    return '';
  }
}
&#13;
&#13;
&#13;

首先测试xs[i]可防止错误尝试访问undefined的属性。

答案 1 :(得分:0)

不,你的代码中没有错误,但是在索引高于其长度的数组上循环是不安全的,它会引发这种错误。

在您的代码中xs[4]undefined这就是您收到此错误的原因:

Uncaught TypeError: Cannot read property 'name' of undefined

所以你只需要抓住并避免这样的错误:

for (var i = 0; i < 5; i++) {
    if(xs[i])
        console.log(setEmptyStr(xs[i].name));
}

答案 2 :(得分:0)

没有名称未定义:

  

未捕获的TypeError:无法读取属性&#39; name&#39;未定义的

所以实际上 xs [i] 是未定义的。你的循环运行5次,但你只有4个元素。您可以使用 .length 来避免:

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

答案 3 :(得分:0)

下面,

for (var i = 0; i < 5; i++) {
    console.log(setEmptyStr(xs[i].name));
}

您正在尝试发送单个数组元素的name,而不检查其是否可用。在你的第5个条目中,你没有任何东西,所以它返回undefined。因为你的数组长度是4.

所以在发送之前检查你是否有object

if(xs[i]) {
  setEmptyStr(xs[i].name)
}