javascript中的php isset()等价物

javascript中的php isset()等价物,javascript,Javascript,我正在寻找php函数的javascript等价物isset()。我已经尝试过这里描述的方法,但是在firebug,错误出现了 data.del is undefined //Firebug warning/error if(typeof data.del[0].node != 'undefined') { // codes in my js file 在某些情况下 data is null

我正在寻找php函数的javascript等价物
isset()
。我已经尝试过这里描述的方法,但是在firebug,错误出现了

data.del is undefined                          //Firebug warning/error
 if(typeof data.del[0].node != 'undefined') { // codes in my js file
在某些情况下

data is null                                  //Firebug warning/error
  if(typeof data.storyLine != 'undefined') { // codes in my js file
逻辑似乎可行,但我想知道为什么会有错误


基本上,我想检查
data.del[0].node
data.storyLine
是否设置???

我认为最好的解决方案是查看以下源代码:

isset()生成:如果定义了变量,则为第一个,如果为null,则为第二个

您必须检查“未定义”大小写和空大小写,例如:

if (typeof data !== 'undefined' && data !== null)
if(typeof data!==“undefined”&&data!==null)ECMAScript定义了
hasOwnProperty
方法,用于检查对象是否具有给定名称的属性:

var foo = {'bar':'bar'}

alert( foo.hasOwnProperty( 'bar' ) ); //true
alert( foo.hasOwnProperty( 'baz' ) ); //false
编辑:这并不能完全回答您的问题

属性可以设置为
未定义

foo.bar = undefined;

alert( foo.hasOwnProperty( 'bar' ) ); //still true
重要的问题是:你需要什么样的真值表

在php中:

type  | isset() | == true
------+---------+----------
null  | false   | false
false | true    | false
true  | true    | true
""    | true    | false
"a"   | true    | true
0     | true    | false
1     | true    | true
在JS中:

type      | isset() | truthy
----------+---------+--------
NaN       | ?       | false
undefined | ?       | false
null      | false   | false
true      | true    | true
false     | true    | false
""        | true    | false
"a"       | true    | true
0         | true    | false
1         | true    | true

或者您可以使用
hasOwnProperty
请详细说明对于
isset()
,哪些条件将返回
true
的结果,具体来说:
NaN
undefined
@zzzzBov,这是jst我进行msql查询,如果有数据,我使用数组的json\u编码返回它们。。如果数据不存在,则不会返回任何内容。然后使用
data.hasOwnProperty('foo')@Jared Farrish,我清楚地记得看到一篇文章提到了
中的
问题,但我相信这是在
循环中的
中。我相信
中的
在大多数情况下都会工作,但我更确定的是
hasOwnProperty
会按预期工作。在进行mysql\u查询后,如果我查找的数据在数据库中,我会使用PHP的json\u encode()函数返回数据。如果数据不在数据库中,则永远不会返回。所以我想检查数据是否来自数据库。如果我得到数据。。我做事。。如果我不做某事。。就是这样,它很有效。。。我尝试了
if(type of data.node!=“undefined”)
if(data.node!=“undefined”&&data.node!=“null”)
,以及
data.hasProperty('node')
。。它们似乎都起作用了。。但是他们都在firebug中抛出了这个红色错误,所以我只是担心,想知道它是否是靠运气工作的@哦,对不起,我移动了评论,因为我不知道你是否会看到它。这里有一个测试,我没有足够的信心作为答案发布,它在
中使用了
:注意:没有Firebugz错误!(FF 4,FB 1.7)@ptamzz,我假设您在第二个示例中忘记了
的类型。它们都是检查是否设置了属性的有效方法,它们之间的唯一区别是边缘情况。@Jared Farrish,中的
在JS中是有效的操作,它不会抛出错误,只是在某些边缘情况下可能会出现意外行为。
type      | isset() | truthy
----------+---------+--------
NaN       | ?       | false
undefined | ?       | false
null      | false   | false
true      | true    | true
false     | true    | false
""        | true    | false
"a"       | true    | true
0         | true    | false
1         | true    | true