JavaScript 中的 Undefined 变量及 value == false 和 !value 之间的区别

阅读时长 3 分钟读完

当在 JavaScript 中使用未声明或未定义的变量时,会抛出 "ReferenceError: variableName is not defined" 错误。

但是,如果我们只是声明了变量却没有初始化它,它的值将会是 undefined。对一个 undefined 的变量进行操作将会导致一些奇怪的行为,因为 undefined 不是布尔值、数字或字符串。

在这里,我们可以看到 undefined 的布尔转换结果是 false。但是,尝试与 false 进行比较会得到意想不到的结果。例如,undefined == false 的结果是 false,而 !undefined 的结果是 true

这是因为 JavaScript 中的相等性运算符 == 在比较非布尔值时会进行类型转换,并将 undefinednull 视为相等的值。所以 undefined == nullnull == undefined 都为 true。但是 undefined == false 的结果是 false,因为 undefinedfalse 是两种不同类型的值。

与此不同的是,逻辑非运算符 ! 在操作数为非布尔值时会将其转换为布尔型,并返回其相反值。所以 !undefined 的结果是 true,而 !false 的结果是 true

在代码中使用 !value 更为常见,因为它可以正确地处理所有 falsy 值(包括 nullundefined0""false)。如果您想判断一个变量是否为真,则应该使用 if (value)if (Boolean(value)) 而不是 if (value == true)if (value == false)。这是因为后两个表达式可能导致类型转换和奇怪的行为。

-- -------------------- ---- -------
--- - - -----
-- --- -
  ----------------- ---- --- -- ---------
-

-- ------------ -
  ----------------- ---- ---- --- -- ---------
-

-- -- -- ----- -
  ----------------- ---- ---------- --- -- ---------
-

-- -- -- ------ -
  ----------------- ---- --- -- ------ ---------
-

总之,在 JavaScript 中,未定义的变量为 undefinedundefined 转换为布尔型的结果为 false。使用 value == false!value 之间的区别在于前者只能正确处理布尔值而不能处理其他 falsy 值,而后者可以正确处理所有 falsy 值。因此,建议您在代码中使用 !value 来检查一个变量是否为假,同时也应该避免在非布尔上下文中比较布尔值。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/31217

纠错
反馈