JavaScript中变量前的感叹号是什么意思

IT技术 javascript variables
2021-01-17 01:22:21

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

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

它是什么?某种测试变量是否为空?

4个回答

!JavaScript 中逻辑非运算符

正式地

!expression 读作:

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

在你的情况下

在您的情况下,!variable.onsubmit意味着如果没有定义函数(因此为假)则返回真,否则返回假(因为定义了函数)。

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

因此,if (!variable) {将进入if子句 if variable is false(or coerces to false)

总共

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

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

下一次,我如何自己找到这个?

基于此代码的其余部分,我并不感到惊讶,谢谢。
2021-03-25 01:22:21
@Winters 或只是variable.onsubmit(). 没有理由这样做。没办法说得好 - 该声明的第二部分只是编码错误。
2021-04-13 01:22:21
好的,我现在有点明白了,但是为什么 OR 的第二部分要检查是否 variable.onsubmit() != false?为什么不检查 variable.onsubmit() = true?
2021-04-14 01:22:21

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

var myVariable = 1;

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

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

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

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 而没有别的,可以只调用函数 asfunctionA(!!parameter)而不是functionA(parameter),这在大多数情况下也不需要,但可以确保额外的安全性

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

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