Javascript '';而不是仅仅检查;“真实的”;或;“法尔西”;存在
回复:Javascript '';而不是仅仅检查;“真实的”;或;“法尔西”;存在,javascript,boolean,Javascript,Boolean,回复:
根据我的理解,在JavaScript中,这将把一个对象强制转换为布尔值。根据另一个SO线程中的回答,它“将oObject强制为boolean。如果为false(例如0、null、未定义等),则为false,否则为true。”
因此,我的问题是,这是代码>比简单地检查虚假或真实的存在更可靠吗?例如,我可以这样做:
return !!(this.services[0] && this.services[0].service);
或者我可以这样做:
if (this.services[0] && this.services[0].service) {
return true;
} else {
return false;
}
这些功能等效吗 是的,它们在功能上是等价的if
使用与完全相同的贯穿性概念代码>操作员。但是,一条语句是简洁的,另一条是无用的样板。&&
返回第一个错误值,因此!!(val1&&val2)
如果您确实需要布尔值的一致性,则可能会更好
例如,如果您正在查看表达式的更改(如AngularJS中的更改):
如果val1
开始时undefined
,则val1和&val2
将计算为undefined
。如果val1
以后变为false
,则val1和&val2
将计算为false
。所以你的观察者会在你不想的时候再次执行!所以最好看!!(val1和&val2)
如果您添加一个else{return false;}
,它们是等价的,是的。您不会使用
在if
的条件下,但是如果你想要一个一致的返回类型,比如这里,这很重要。你是在问它是否有用,还是专门针对你的案例?@shmosel,我是在问它们的功能是否等效。听上去,除了一个比另一个更简洁之外,就我上面的例子来说,它们是。你在把苹果和桔子做比较<代码>
不是检查值的另一种方法,而是将值从一种类型更改为另一种类型。那么,同样,您是在询问您的特定示例还是一般用例?不存在a
和b
的任何值,因此if(a&&b){return true}else{return false}
将产生不同的值return!!(a和b)
。出色的区分。我可以看到,在我的用例中!!更强壮。这实际上发生在我身上。我有一个经过优化的API,在将C
对象序列化为JSON
时,它省略了null
和false
属性。因此,当属性到达浏览器时,它们是未定义的。后来,当我在JavaScript中将其中一个undefined
属性设置为false
时,我的观察者执行了。
$scope.$watch(() => val1 && val2, (newVal, oldVal) => {
//...
});