变量前面的感叹号在JavaScript中意味着什么?

时间:2013-10-21 10:02:52

标签: javascript variables

我正在尝试通过浏览应用程序中的一些代码来学习JavaScript,并且如果条件允许,我会继续查看!variable。例如:

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

这是什么?如果变量是空的,可以进行某种测试吗?

4 个答案:

答案 0 :(得分:43)

!是JavaScript中的logical not operator

形式上

!expression读作:

  • expression进行评估。在你的情况下是variable.onsubmit
  • 判断评估结果并将其转换为布尔值。在你的情况下,因为onsubmit可能是一个函数,它意味着 - 如果函数为null或未定义 - 返回false,否则返回true。
  • 如果评估结果为true,则返回false。否则返回true。

在您的情况下

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

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

因此,if (!variable) {如果变量为if(或强制为假),则会输入false子句

总计

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

表示 - 检查variable.onsubmit是否已定义且真实(因此为真),然后检查调用onsubmit是否返回强制为真的结果。在一个短行中,它检查是否没有onsubmit或它返回true。

下次,我如何找到这个?

答案 1 :(得分:3)

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

var myVariable = 1;

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

if ( myVariable )
{
    // myVariable evaluates as true
}

答案 2 :(得分:0)

所选答案已经回答了问题。要添加的一件事是sudo pecl install mcrypt-1.0.1 运算符可以以一种非常有趣的方式使用。

!

因此,双obj = {} if (!!obj) {console.log('works')} // !!obj = true obj = undefined if (!!obj) {console.log('does not work')} // !!obj = false 会将任何表达式更改为!!值,没有例外。

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

  • 可以说有一个函数返回true或false,并且没有其他返回值。在那种情况下,可以格外小心地将boolean更改为return returnValue(尽管在大多数情况下不需要)

  • 相反,如果一个函数仅接受true或false,而没有其他任何东西,则可以将其称为return !!returnValue而不是functionA(!!parameter),这在大多数情况下都是不需要的,但可以确保额外的安全性

答案 3 :(得分:0)

!是逻辑逆运算符,如果为真,则将其更改为false;如果为真,则将其更改为true。

例如,我们知道空字符串或布尔值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