在 PHP 中你可以做到if(isset($array['foo'])) { ... }。在 JavaScript 中你经常使用if(array.foo) { ... }做同样的事情,但这不是完全一样的陈述。array.foo如果确实存在但为false或0(可能还有其他值),该条件也将评估为假。
if(isset($array['foo'])) { ... }
if(array.foo) { ... }
array.foo
false
0
什么是issetJavaScript 中 PHP 的完美等价物?
isset
在更广泛的意义上,关于 JavaScript 处理不存在的变量、没有值的变量等的通用、完整指南会很方便。
更新 :11 年零 11 个月前我发布了这个问题,哇,它仍然有很多活动。现在,我很确定当我写这篇文章时,我只想知道如何检查关联数组(又名字典)中是否存在属性,因此正确的(对我而言)答案涉及hasOwnProperty或in运算符. 我对检查局部或全局变量不感兴趣。
hasOwnProperty
in
但是,虽然我记得很清楚,但这个意图在所写的问题中并不十分清楚,甚至直接与之相矛盾!我从来没有提到过关联数组,而 PHPisset也可以做其他事情。让这成为我们所有人的一课,了解在问题中正确陈述您的要求是多么重要,以及全局变量、局部变量、对象属性、字典键和你不是 Huey、Dewey、和路易。
与此同时(呵呵),很多人也提供了这个效果的答案,所以对于那些通过谷歌发现这个问题的人,我很高兴我的含糊不清在某种程度上有所帮助。无论如何,只是想澄清一下。
我一般使用typeof运算符:
typeof
if (typeof obj.foo !== 'undefined') { // your code here }
"undefined"如果属性不存在或其值为,它将返回undefined。
"undefined"
undefined
还有其他方法可以确定对象上是否存在属性,例如hasOwnProperty方法:
if (obj.hasOwnProperty('foo')) { // your code here }
和in运营商:
if ('foo' in obj) { // your code here }
后两者的区别在于该hasOwnProperty方法将检查该属性是否 物理 地存在于对象上(该属性不被继承)。
操作员将in检查原型链中所有可达的属性,例如:
var obj = { foo: 'bar'}; obj.hasOwnProperty('foo'); // true obj.hasOwnProperty('toString'); // false 'toString' in obj; // true
如您所见,在检查方法时hasOwnProperty返回false和in操作符返回,该方法是在原型链中定义的,因为继承了 form 。true``toString``obj``Object.prototype
true``toString``obj``Object.prototype