23

我正在尝试通过浏览应用程序中的一些代码来学习 JavaScript,并且我一直在查看!variableif 条件。例如:

if (!variable.onsubmit || (variable.onsubmit() != false)) {

它是什么?如果变量为空,则进行某种测试?

4

4 回答 4

52

!是JavaScript中的逻辑非运算符。

正式地

!expression读作:

  • 接受expression并评估它。在你的情况下variable.onsubmit
  • 将该评估的结果设置为大小写并将其转换为布尔值。在您的情况下,因为onsubmit它可能是一个函数,这意味着 - 如果该函数为 null 或未定义 - 返回 false,否则返回 true。
  • 如果该评估为真,则返回假。否则返回真。

在你的情况下

在您的情况下!variable.onsubmit,如果没有定义函数(因此是错误的),则返回 true ,否则返回 false (因为定义了函数)。

简单地说 -!variable意味着取其真值variable并否定它。

因此,如果变量是(或强制为假)if (!variable) {将进入子句iffalse

总共

if (!variable.onsubmit || (variable.onsubmit() != false)) {

手段 - 检查是否variable.onsubmit已定义且为真(因此为真),然后检查调用是否onsubmit返回强制为真的结果。在很短的一行中,它会检查是否存在onsubmit或返回 true。

下次,我自己怎么找到这个?

于 2013-10-21T10:04:31.997 回答
6

它是一个否定运算符,用于对变量进行真值测试。

var myVariable = 1;

if ( ! myVariable )
{
    // myVariable evaluates as false
}

if ( myVariable )
{
    // myVariable evaluates as true
}
于 2013-10-21T10:06:14.317 回答
1

所选答案已经回答了问题。要添加的一件事是!操作符可以以一种相当有趣的方式使用。

obj = {}
if (!!obj) {console.log('works')} // !!obj = true
obj = undefined
if (!!obj) {console.log('does not work')} // !!obj = false

所以 double!!会将任何表达式更改为一个boolean值,没有例外。

在某些情况下,这有一个非常特殊的用例。

  • 可以说有一个函数返回 true 或 false 而没有别的。在这种情况下,为了格外小心,您可以更改return returnValuereturn !!returnValue(尽管在大多数情况下不需要)

  • 相反,如果一个函数只接受 true 或 false 而没有其他参数,则可以将函数调用为functionA(!!parameter)而不是functionA(parameter),这在大多数情况下也是不需要的,但可以确保额外的安全性

于 2018-08-20T06:05:44.533 回答
0

!是一个逻辑反转运算符,如果某事为真,则将其更改为假,如果某事为假,则将其更改为真。

例如,我们知道空字符串或布尔值中的 0 是假的。

let a = Boolean("")
console.log(a) // shows false, because empty string in boolean is false
console.log(!a) // shows true, because logic is reversed

更简单的例子:

let a = 5
let b = 1
let c = a > b
console.log(c) // shows true, since a,5 is bigger than b,1
console.log(!c) // shows false, since logic is now reversed
于 2020-07-18T00:59:13.710 回答