我看到一些代码似乎使用了我不认识的运算符,以两个感叹号的形式,像这样:!!。有人能告诉我这个接线员做什么吗?
我看到这件事的背景是,
this.vertical = vertical !== undefined ? !!vertical : this.vertical;
我看到一些代码似乎使用了我不认识的运算符,以两个感叹号的形式,像这样:!!。有人能告诉我这个接线员做什么吗?
我看到这件事的背景是,
this.vertical = vertical !== undefined ? !!vertical : this.vertical;
当前回答
这个构造是将任何JavaScript表达式转换为它的布尔等价物。
例如:!!“他击落了我”==真的!!0===假。
其他回答
在看到所有这些伟大的答案后,我想补充一个使用!!的理由!!。目前,我正在使用Angular 2-4(TypeScript),当我的用户未通过身份验证时,我希望将布尔值返回为false。如果他未通过身份验证,则令牌字符串将为null或“”。我可以通过使用下一段代码来实现这一点:
public isAuthenticated(): boolean {
return !!this.getToken();
}
!! 将其右侧的值转换为其等效的布尔值。(想想穷人的“类型转换”方式。)其目的通常是向读者传达,代码不关心变量中的值,而是关心变量的“真值”值。
它不是一个操作员;它是两个。它相当于以下内容,是将值转换为布尔值的快速方法。
val.enabled = !(!enable);
我怀疑这是C++遗留下来的东西,在那里人们会重写!运算符,但不是布尔运算符。
因此,在这种情况下,要获得否定(或肯定)答案,首先需要使用!运算符来获取布尔值,但如果您想检查正数,则可以使用!!。
JavaScript中的一些运算符执行隐式类型转换,有时用于类型转换。
一元!运算符将其操作数转换为布尔值并对其求反。
这一事实导致了以下习惯用法,您可以在源代码中看到:
!!x // Same as Boolean(x). Note double exclamation mark