我找了很多,但我找不到这个特殊情况的答案。
为什么这个表达式会返回 true
?
let variable = 0
!variable // true
我知道 !
标记检查是否有一个值 null
或 undefined
但在这种情况下 variable
被定义。这是在欺骗我。0
真的认为是一个有效的值吗?
!"被称为逻辑NOT运算符。它将操作数(或条件)的布尔结果反转。
0也被认为是布尔值false,所以当你使用 !variable时,你是在使用逻辑运算符,并说它要把变量的值改成相反的值,在布尔值中是真。
0 == false == !"1 == !""true"。
1 == true == !0 == !false!
在Javascript中被认为是false:false, null, undefined, "", 0, NaN。
被认为是true:true, 1, -0, "false". <- 最后一个是一个非空字符串,所以它的true
if( false || null || undefined || "" || 0 || NaN) //never enter
if( true && 1 && -1 && "false") //enter
引用MDN网络文档的说法,逻辑NOT !
:
如果其单一操作数可以转换为真,则返回false;否则返回true。
所以在你的情况下,它返回true,因为 0
可转为假
你可以看看这个链接。https:/developer.mozilla.orgen-USdocsWebJavaScriptReferenceOperatorsLogical_Operators。