我正在尝试通过浏览应用程序中的一些代码来学习 JavaScript,并且我一直!variable
在查看if 条件。例如:
if (!variable.onsubmit || (variable.onsubmit() != false)) {
它是什么?某种测试变量是否为空?
我正在尝试通过浏览应用程序中的一些代码来学习 JavaScript,并且我一直!variable
在查看if 条件。例如:
if (!variable.onsubmit || (variable.onsubmit() != false)) {
它是什么?某种测试变量是否为空?
!
是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。
它是用于对变量进行真值测试的否定运算符。
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