我正在尝试将所有数组元素转换为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
,则不会转换它们。我该如何更改代码才能实现此目的?
答案 0 :(得分:4)
typeof MyThing[i] === undefined
始终为false,因为typeof运算符始终返回一个字符串。使用以下之一:
typeof MyThing[i] === 'undefined'
MyThing[i] === undefined
另外,这不会检查值是null
(typeof 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] === undefined
或typeof 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') {