Javascript 未定义对象的if子句要求对外部数组进行测试
在测试ajax代码时,我注意到我只能在外部数组上执行if-defined子句 对我来说,如果我必须检查所有外部阵列,这似乎有点多余。假设有10个子阵列有人能确认这是否正常吗,或者告诉我一种更好的方法来检查对象是否未定义?我从Stackoverflow获取的代码(部件类型)Javascript 未定义对象的if子句要求对外部数组进行测试,javascript,Javascript,在测试ajax代码时,我注意到我只能在外部数组上执行if-defined子句 对我来说,如果我必须检查所有外部阵列,这似乎有点多余。假设有10个子阵列有人能确认这是否正常吗,或者告诉我一种更好的方法来检查对象是否未定义?我从Stackoverflow获取的代码(部件类型) if (typeof obj['item'] == 'undefined') { //this works } else { //proceed } if (typeof obj['item']['color'] =
if (typeof obj['item'] == 'undefined') {
//this works
} else {
//proceed
}
if (typeof obj['item']['color'] == 'undefined') {
//this does not work
} else {
//proceed
}
注意:显然这是正常的(答案是“是”),感谢Epasarello提供了解决方法的链接。
运算符或typeof
(或==
)运算符可应用于任何表达式的结果=
- 任何表达式的求值都可能引发错误
obj['item']
或obj.item
是无法索引的任何类型的对象,例如未定义或null,则表达式(如obj['item']]
或obj.item
将引发错误
同样,如果obj['item']['color']
的计算结果为无法索引的值,则诸如obj['item'][/code>之类的表达式将引发错误
在诸如typeof foo
或foo===undefined
之类的表达式中,foo
部分在typeof
或===
部分之前求值。因此,如果foo
是obj['item']['color']
:
obj['item']['color'] === undefined
首先将obj
计算为一个值。然后计算对象['item']。然后对obj['item']['color']进行评估。(同时未定义
被求值)然后可以求值=
运算符。如果这些步骤中的任何一个抛出错误,那么就会抛出错误
如果您确实不知道正在处理的数据,并且确实不希望抛出任何错误,那么您的代码最终将看起来像:
if (obj !== undefined && obj !== null && obj.item !== undefined && obj.item !== null && obj.item.color !== undefined)
{
console.log("Hello World!");
}
else
{
console.log("Sorry, I can't help you.");
}
简言之:这是正常的。每个步骤按顺序进行,当任何步骤引发异常时,执行停止。或任何其他搜索结果什么不起作用
obj['item']['color']
可以是未定义的,但是当然如果obj['item']
是未定义的,那么你就不能对其应用['color']
操作,该操作将发生在=
@espascarello之前@espascarello哇,该代码看起来像是外来语言:)谢谢链接@dsh,基本问题有更多的细微差别,而不是不起作用…,我将重新措辞。非常感谢您的解释,很抱歉反应太晚。