无法读取未定义错误的属性“替换”

时间:2015-12-21 14:41:02

标签: javascript arrays

我正在尝试将所有数组元素转换为null,如果有些undefined

console.log(MyThing[7]); //undefined.

for (var i = 0; i < 8; i++) {
  if ($(".row.mine") != null) {
    if (typeof MyThing[i] === undefined) {
      MyThing[i] = null;
    } else {
      MyThing[i] = MyThing[i].replace(/Aa.*/, '').replace("-", "");
    }
  } else {
    if (typeof MyThing[i] === undefined) {
      MyThing[i] = null;
    }
  }
}

但这给了我一个错误Cannot read property 'replace' of undefined。因此,如果元素为undefined,则不会转换它们。我该如何更改代码才能实现此目的?

3 个答案:

答案 0 :(得分:4)

typeof MyThing[i] === undefined始终为false,因为typeof运算符始终返回一个字符串。使用以下之一:

typeof MyThing[i] === 'undefined'
MyThing[i] === undefined

另外,这不会检查值是nulltypeof null === 'object')。我看到你可以有空值,所以你遇到的下一个错误可能是Cannot read property 'replace' of null

我建议你直接检查字符串类型:

if ($(".row.mine") != null) {
  if (typeof MyThing[i] !== 'string') {
    MyThing[i] = null;
  } else {
    MyThing[i] = MyThing[i].replace(/Aa.*/, '').replace("-", "");
  }
} else {
  if (typeof MyThing[i] !== 'string') {
    MyThing[i] = null;
  }
}

答案 1 :(得分:2)

typeof MyThing[i] === undefined应为MyThing[i] === undefinedtypeof MyThing[i] === 'undefined',因为typeof始终会为您提供字符串

但在你的背景下,我只是使用undefined是假的事实:

if (!MyThing[i]) {
  MyThing[i] = null;
} else {
  MyThing[i] = MyThing[i].replace(/Aa.*/, '').replace("-", "");
}

,除非 MyThing[i]可能是"",并且您不希望转换为null

或者表达积极的态度:

if (MyThing[i]) {
  MyThing[i] = MyThing[i].replace(/Aa.*/, '').replace("-", "");
} else {
  MyThing[i] = null;
}

但请再次注意关于""的事情。

答案 2 :(得分:0)

我猜这是一个拼写错误,请尝试将undefined放在引号中:

 if (typeof MyThing[i] === 'undefined') {