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;
}
这些功能是否相同?
答案 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
使用与!
运算符完全相同的完美概念。但是,一个陈述是简洁的,另一个是无用的样板。