我看到了一些似乎使用不认识的运算符的代码,它以两个感叹号的形式出现,像这样: !!
。 有人可以告诉我这个操作员做什么吗?
我看到的背景是
this.vertical = vertical !== undefined ? !!vertical : this.vertical;
#1楼
!!expr
根据表达式的真实性返回布尔值( true
或false
)。 在非布尔类型上使用时更有意义。 考虑以下示例,尤其是第三个示例及以后的示例:
!!false === false
!!true === true
!!0 === false
!!parseInt("foo") === false // NaN is falsy
!!1 === true
!!-1 === true // -1 is truthy
!!"" === false // empty string is falsy
!!"foo" === true // non-empty string is truthy
!!"false" === true // ...even if it contains a falsy value
!!window.foo === false // undefined is falsy
!!null === false // null is falsy
!!{} === true // an (empty) object is truthy
!![] === true // an (empty) array is truthy; PHP programmers beware!
#2楼
!!
将其右侧的值转换为其等效的布尔值。 (想想穷人的“类型转换”方式)。 它的目的是通常传达给读者的是,代码不关心什么值是可变的,但它的“真”值是。
#3楼
它将后缀转换为布尔值。
#4楼
这是进行类型转换的令人费解的方法。
!
不是 。 所以!true
为false
, !false
为true
。 !0
为true
, !1
为false
。
因此,您要将一个值转换为布尔值,然后将其求反,然后再次将其求反。
// Maximum Obscurity:
val.enabled = !!userId;
// Partial Obscurity:
val.enabled = (userId != 0) ? true : false;
// And finally, much easier to understand:
val.enabled = (userId != 0);
#5楼
这是一个双not
操作。 第一!
将值转换为布尔值并反转其逻辑值。 第二!
反转逻辑值。
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3136272