我正在尝试通过浏览应用程序中的一些代码来学习 JavaScript,并且我一直!variable在查看if 条件。例如:
if (!variable.onsubmit || (variable.onsubmit() != false)) {
它是什么?某种测试变量是否为空?
我正在尝试通过浏览应用程序中的一些代码来学习 JavaScript,并且我一直!variable在查看if 条件。例如:
if (!variable.onsubmit || (variable.onsubmit() != false)) {
它是什么?某种测试变量是否为空?
!是JavaScript 中的逻辑非运算符。
!expression 读作:
expression评价一下。在你的情况下variable.onsubmitonsubmit可能是一个函数,这意味着 - 如果该函数为空或未定义 - 返回 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。
它是用于对变量进行真值测试的否定运算符。
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 returnValue为return !!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