我看到一些代码似乎使用了我不认识的运算符,以两个感叹号的形式,像这样:!!。有人能告诉我这个接线员做什么吗?
我看到这件事的背景是,
this.vertical = vertical !== undefined ? !!vertical : this.vertical;
我看到一些代码似乎使用了我不认识的运算符,以两个感叹号的形式,像这样:!!。有人能告诉我这个接线员做什么吗?
我看到这件事的背景是,
this.vertical = vertical !== undefined ? !!vertical : this.vertical;
当前回答
有时,有必要检查函数中是否有值,数量本身对我们来说并不重要,但它是否重要。
例如,我们想检查用户是否有专业,并且我们有一个如下的功能:
hasMajor() {return this.major} // It returns "(users major is) Science"
但答案对我们来说并不重要。我们只想检查它是否有主,我们需要一个布尔值(true或false)。我们如何得到它?
就像这样:
hasMajor() { return !(!this.major)}
或相同
hasMajor() {return !!this.major)}
如果this.major有值,那么!this.major返回false,但因为值有出口,我们需要返回true,所以我们使用!两次返回正确答案!(!this.major)。
其他回答
看来是!!运算符导致双重否定。
var foo = "Hello, World!";
!foo // Result: false
!!foo // Result: true
!! 不是运算符。这只是!操作员两次。
但使用JavaScript,应用!!在大多数情况下,将Object转换为Boolean是冗余和冗长的,因为:
值未定义或为空的任何对象,包括值为false的布尔对象,传递给有条件的陈述
示例:if({}){console.log(“{}是true”)}//logs:“{}是true”
这是一次双重手术。第一个!将值转换为布尔值并反转其逻辑值。第二个!反转逻辑值。
!! 只是两次NOT运算符。净效果就是转换任何东西以确保布尔数据类型。例如
!!undefined为false!!0为假!!null为false!!anyobject为true!!真是真!!false是false!0为真!1为假!!'' 是假的
要将JavaScript变量转换为布尔值,
var firstname = "test";
// Type of firstname is string
var firstNameNotEmpty = !!firstname;
// Type of firstNameNotEmpty is Boolean
JavaScript false表示“”、0、undefined和null。
JavaScript对于除零以外的数字是真的,而不是空字符串、{}、[]和new Date(),因此,
!!("test") /* Is true */
!!("") /* Is false */