JavaScript isset() 等效

标签 javascript isset

在 PHP 中,您可以执行 if(isset($array['foo'])) { ... }。在 JavaScript 中,您经常使用 if(array.foo) { ... } 来做同样的事情,但这不是完全相同的语句。如果 array.foo 确实存在但为 false0(可能还有其他值),则条件也将评估为 false。

什么是 PHP 的 isset 在 JavaScript 中的完美等价物?

在更广泛的意义上,关于 JavaScript 处理不存在的变量、没有值的变量等的通用、完整指南会很方便。


更新:11 年零 11 个月前我发布了这个问题,哇,它仍然有很多事件。现在,我很确定当我写这篇文章时,我只想知道如何检查关联数组(又名字典)中是否存在属性,因此正确的(对我而言)答案涉及 hasOwnPropertyin 运算符。我对检查局部或全局变量不感兴趣。

但是,虽然我记得很清楚,但这个意图在所写的问题中并不十分清楚,甚至直接与之相矛盾!我从来没有提到关联数组,PHP 的 isset 也可以做其他事情。让这成为我们所有人的一课,了解在问题中正确陈述您的要求是多么重要,以及全局变量、局部变量、对象属性、字典键和你不是 Huey、Dewey、和路易。

与此同时(呵呵),很多人也提供了这个问题的答案,所以对于那些通过谷歌找到这个问题的人来说,我很高兴我的含糊不清在某种程度上有所帮助。无论如何,只是想澄清一下。

最佳答案

我一般用typeof运营商:

if (typeof obj.foo !== 'undefined') {
  // your code here
}

如果属性不存在或其值为undefined,它将返回"undefined"

(另见:Difference between undefined and not being defined.)

还有其他方法可以确定对象上是否存在属性,例如 hasOwnProperty方法:

if (obj.hasOwnProperty('foo')) {
  // your code here
}

还有 in 运算符:

if ('foo' in obj) {
  // your code here
}

最后两者的区别在于hasOwnProperty方法会检查该属性是否存在于对象上physically(该属性不被继承)。

in 操作符将检查原型(prototype)链中所有可达的属性,例如:

var obj = { foo: 'bar'};

obj.hasOwnProperty('foo'); // true
obj.hasOwnProperty('toString'); // false
'toString' in obj; // true

如你所见,hasOwnProperty返回falsein操作符在检查时返回true >toString 方法,这个方法是在原型(prototype)链中定义的,因为 obj 继承了 Object.prototype 的形式。

关于JavaScript isset() 等效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2281633/

相关文章:

PHP isset() 返回 false 什么时候应该返回 true?

javascript - 将带有 <button type ="submit"> 的表单提交到同一页面

javascript - 如何为多个表单创建确认框

javascript - 半秒后使用 AngularJS 在鼠标悬停时显示子菜单

javascript - 检查时 Bootstrap 按钮类重复,我该如何解决这个问题?

php - isset($_COOKIE ['name' ])) 不工作

javascript - 如何使用 Javascript 和 postMessage 将变量传递到新窗口

PHP 读取 'get' 可能已设置或未设置的变量

php - 将 isset 与 mysql_real_escape_string 结合使用

php - 是否有更好的解决方案来检查许多变量以查看其中一个变量在 PHP 中是否为空?