我看到了一些似乎使用不认识的运算符的代码,它以两个感叹号的形式出现,像这样: !! 。 有人可以告诉我这个操作员做什么吗?
我看到的背景是
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操作。 第一! 将值转换为布尔值并反转其逻辑值。 第二! 反转逻辑值。