javascript中的php风格函数检查
我记不清它到底调用了什么,但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
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好得多。