无法读取未定义错误的属性“replace”
2015-12-21
1696
如果某些数组元素为
undefined
,我尝试将其全部转换为
null
:
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;
}
}
}
但这会给出错误
无法读取未定义的属性“replace”
。因此,如果元素为
undefined
,则不会转换。我应该如何更改代码来实现此目的?
3个回答
typeof MyThing[i] === undefined
始终为 false,因为 typeof 运算符始终返回字符串。请使用下列之一:
typeof MyThing[i] === 'undefined'
MyThing[i] === undefined
此外,这不会检查值是否为
null
(因为
typeof null === 'object'
)。据我所知,您可以拥有 null 值,因此您遇到的下一个错误可能是
无法读取 null 的属性“replace”
。
我建议您直接检查字符串类型:
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;
}
}
Tamas Hegedus
2015-12-21
typeof MyThing[i] === undefined
应为
MyThing[i] === undefined
或
typeof MyThing[i] === 'undefined'
,因为
typeof
始终为您提供一个
string
。
但在您的上下文中,我只会使用
undefined
为 false 的事实:
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;
}
但同样,请注意有关
""
的事情。
T.J. Crowder
2015-12-21
我猜这是一个拼写错误,请尝试将 undefined 放在引号内:
if (typeof MyThing[i] === 'undefined') {
I am L
2015-12-21