当在 JavaScript 中使用未声明或未定义的变量时,会抛出 "ReferenceError: variableName is not defined" 错误。
console.log(variableName); // Uncaught ReferenceError: variableName is not defined
但是,如果我们只是声明了变量却没有初始化它,它的值将会是 undefined
。对一个 undefined
的变量进行操作将会导致一些奇怪的行为,因为 undefined
不是布尔值、数字或字符串。
let x; console.log(x) // undefined console.log(x == null) // true console.log(x == "") // false console.log(x == false) // false console.log(x == 0) // false console.log(!x) // true
在这里,我们可以看到 undefined
的布尔转换结果是 false
。但是,尝试与 false
进行比较会得到意想不到的结果。例如,undefined == false
的结果是 false
,而 !undefined
的结果是 true
。
这是因为 JavaScript 中的相等性运算符 ==
在比较非布尔值时会进行类型转换,并将 undefined
和 null
视为相等的值。所以 undefined == null
和 null == undefined
都为 true
。但是 undefined == false
的结果是 false
,因为 undefined
和 false
是两种不同类型的值。
与此不同的是,逻辑非运算符 !
在操作数为非布尔值时会将其转换为布尔型,并返回其相反值。所以 !undefined
的结果是 true
,而 !false
的结果是 true
。
在代码中使用 !value
更为常见,因为它可以正确地处理所有 falsy 值(包括 null
、undefined
、0
、""
和 false
)。如果您想判断一个变量是否为真,则应该使用 if (value)
或 if (Boolean(value))
而不是 if (value == true)
或 if (value == false)
。这是因为后两个表达式可能导致类型转换和奇怪的行为。
-- -------------------- ---- ------- --- - - ----- -- --- - ----------------- ---- --- -- --------- - -- ------------ - ----------------- ---- ---- --- -- --------- - -- -- -- ----- - ----------------- ---- ---------- --- -- --------- - -- -- -- ------ - ----------------- ---- --- -- ------ --------- -
总之,在 JavaScript 中,未定义的变量为 undefined
,undefined
转换为布尔型的结果为 false
。使用 value == false
和 !value
之间的区别在于前者只能正确处理布尔值而不能处理其他 falsy 值,而后者可以正确处理所有 falsy 值。因此,建议您在代码中使用 !value
来检查一个变量是否为假,同时也应该避免在非布尔上下文中比较布尔值。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/31217