!foo 和 typeof foo === “undefined” 之间的区别

Difference between !foo and typeof foo === "undefined"

本文关键字:foo 之间 区别 typeof undefined      更新时间:2023-09-26

这有什么区别:

if(!foo) {
  ...
}

而这个:

if(typeof foo === "undefined") {
  ...
}

我见过一些代码试图将这两个语句视为相同的语句,但是在这样做时遇到了问题。我一直在用AngularJS做这样的事情:

var property = {
  value: $scope.foo //$scope.foo may or may not have been defined above, depending on contexts
  ...
};
func(property);
function func (property) {
  if(!property.value) {
  //This doesn't get executed, even if $scope.foo was never defined
  }
}

在我看来,(!foo)!== (typeof foo === "undefined")

这是对的吗?

下面是一个它们不相同的示例:

var foo = false;
if(!foo) {
    alert('!foo');
}
if(typeof foo === "undefined") {
    alert('undefined');
}

仅满足第一个条件。