javascript中的php风格函数检查

javascript中的php风格函数检查,javascript,function,Javascript,Function,我记不清它到底调用了什么,但php会在函数中发现一个假值后立即检查并存在,如下所示: // php if(isset(a["hi"]) && isset(a["hi"]["hello"])) { } 在这里,如果未设置a[“hi”],它将不必检查下一个a[“hi”][“hello”] 要在javascript中检查类似的内容,需要嵌套 // js if(typeof(a["hi"]) != "undefined") { if(typeof(a["hi"]["hello

我记不清它到底调用了什么,但php会在函数中发现一个假值后立即检查并存在,如下所示:

// php
if(isset(a["hi"]) && isset(a["hi"]["hello"])) {

}
在这里,如果未设置
a[“hi”]
,它将不必检查下一个
a[“hi”][“hello”]

要在javascript中检查类似的内容,需要嵌套

// js
if(typeof(a["hi"]) != "undefined") {
    if(typeof(a["hi"]["hello"]) != "undefined") {

    }
}
我们可以在javascript中执行php风格的延迟检查吗? (我可能没有使用最好的方法来检查多维数组中是否存在元素,如果有一种简洁的方法,我很想知道。)


谢谢

您可以使用中的
检查属性是否存在

if(a && ('hi' in a) && ('hello' in a['hi'])) {

}

您可以使用
中的
检查属性是否存在

if(a && ('hi' in a) && ('hello' in a['hi'])) {

}
如果您知道a.hi永远不能是假值(
null
/
false
/
0
),您可以这样做

if(!a.hi && !a.hi.hello) {
如果您知道a.hi永远不能是假值(
null
/
false
/
0
),您可以这样做

if(!a.hi && !a.hi.hello) {

检查字符串
“undefined”
变量的
类型等同于使用
==
检查变量是否与
undefined
关键字的数据类型相同。因此,可以将嵌套的if语句缩减为单个语句:

if(a.hi !== undefined && a.hi.hello !== undefined) {
  // do something with a.hi.hello
}
值得注意的是,上面的语句假设当if语句发生时,
a
不是null,这可能会导致错误。同样,如果您要求
a.hi.hello
出现在
if
语句中进行求值,则可以对
a
a.hi
使用falsy检查,因为它们需要是
对象
类型(非falsy):


检查字符串
“undefined”
变量的
类型等同于使用
==
检查变量是否与
undefined
关键字的数据类型相同。因此,可以将嵌套的if语句缩减为单个语句:

if(a.hi !== undefined && a.hi.hello !== undefined) {
  // do something with a.hi.hello
}
值得注意的是,上面的语句假设当if语句发生时,
a
不是null,这可能会导致错误。同样,如果您要求
a.hi.hello
出现在
if
语句中进行求值,则可以对
a
a.hi
使用falsy检查,因为它们需要是
对象
类型(非falsy):


您要查找的术语是如何在第一个非真表达式中“短路”多步布尔检查的?JavaScript也有这样的功能(虽然它在多步布尔赋值的情况下有不同的行为,例如
foo=bar |{}
(但这不是你的问题)@LarryOBrien谢谢,是的,它“短路了”,是的,现在它似乎工作了,在firebug中没有正确构造语句是
defined`。不可能,
a['hi']
将是
未定义的
。我认为您只需要第二个条件。您要寻找的术语是如何在第一个非真表达式处多步布尔检查“短路”的?JavaScript也有这一点(虽然它在多步布尔赋值的情况下有不同的行为,比如
foo=bar |{}
(但这不是你的问题)@LarryOBrien谢谢,是的,它“短路了”,是的,现在它似乎工作了,在firebug中没有正确构造语句。如果
a['hi']['hello']是
defined`。没有办法,
a['hi']
将是未定义的。我想你只需要第二个条件。谢谢,我要用这个,它比typeof好得多。谢谢,我要用这个,它比typeof好得多。