“!”而只是检查“真实”或“虚假”的存在

时间:2017-06-14 16:55:02

标签: javascript boolean

Re:JavaScript中的!!,根据我的理解,这会将对象强制转换为布尔值。根据另一个SO线程中的答案,它“强制oObject为boolean。如果它是假的(例如0,null,undefined等),它将为false,否则为true。”

因此,我的问题是,!!是否比仅仅检查虚假或真实存在更强大?例如,我可以这样做:

return !!(this.services[0] && this.services[0].service);

或者我可以这样做:

if (this.services[0] && this.services[0].service) {
  return true;
} else {
  return false;
}

这些功能是否相同?

2 个答案:

答案 0 :(得分:3)

&&返回第一个假值,因此如果你真的需要布尔值的一致性,!!(val1 && val2)可能会更好。

例如,如果您正在观察表达式的更改(例如AngularJS):

$scope.$watch(() => val1 && val2, (newVal, oldVal) => { 
    //... 
});

如果val1开始undefined,则val1 && val2将评估为undefined。如果val1稍后变为false,则val1 && val2将评估为false。所以当你可能不想要时,你的观察者会再次执行!因此,观看!!(val1 && val2)可能会更好。

答案 1 :(得分:1)

是的,它们功能相同。 if使用与!运算符完全相同的完美概念。但是,一个陈述是简洁的,另一个是无用的样板。