在 JavaScript 中检查一个值是否为 Falsy
How to Check if a Value is Falsy in JavaScript
使用逻辑 NOT (!) 运算符检查值是否为假值,例如
if (!myValue)
.
逻辑 NOT 运算符true
在它出现在假值之前时返回,在所有其他情况下它返回false
。
索引.js
const myVar = 0; if (!myVar) { console.log('✅ myVar is falsy'); } else { console.log('⛔️ myVar is truthy'); }
我们使用
逻辑 NOT (!)
运算符来检查myVar
变量是否存储了假值。
JavaScript 中的假值是:false
, 0
, -0
, ""
(空字符串),
null
, undefined
, NaN
(不是数字)。
仅当存储在变量中的值是上述虚假值之一时,我们的if
块才会运行。myVar
6
以下是使用逻辑 NOT (!) 运算符和假值的示例:
索引.js
console.log(!false); // 👉️ true console.log(!0); // 👉️ true console.log(!''); // 👉️ true console.log(!null); // 👉️ true console.log(!undefined); // 👉️ true console.log(!NaN); // 👉️ true
所有其他值都被认为是真实的。
空数组和空对象被认为是两个更容易混淆的真值。以下是示例:
索引.js
if (![]) { console.log("⛔️ This doesn't run"); } else { console.log('✅ This runs'); } if (!{}) { console.log("⛔️ This doesn't run"); } else { console.log('✅ This runs'); }
即使数组和对象为空,它们也不是与空字符串相反的虚假值。
索引.js
if (!"") { console.log('✅ This runs'); } else { console.log("⛔️ This doesn't run"); }
如果您需要检查数组或对象是否包含元素或键值对,请改为执行以下操作:
索引.js
if (['a'].length > 0) { // 👉️ array is not empty } if (Object.keys({a: 'b'}).length > 0) { // 👉️ object is not empty }
我们使用该length
属性来检查数组是否有多个0
元素。
如果数组有多个0
元素,则它不是空的。
索引.js
console.log([].length); // 👉️ 0 console.log(['bobby', 'hadz', 'com'].length); // 👉️ 3
如果您需要检查一个对象是否不为空,请检查该对象是否有多个
0
键。
索引.js
if (Object.keys({a: 'b'}).length > 0) { // 👉️ object is not empty }
该Object.keys()
方法返回一个包含对象键的数组。
如果数组包含多个0
键,则对象不为空。
您也可以隐式地进行检查,例如:
索引.js
if ([].length) { // 👉️ if this runs, the array is not empty }
在此示例中,我们访问length
一个空数组的属性,该数组的计算结果为0
。
0
是一个假值,所以该if
块不会运行。
如果要以隐式方式检查数组是否为空,请使用逻辑 NOT (!) 运算符。
索引.js
if (![].length) { // 👇️ this runs console.log('The array is empty'); } else { console.log('The array is NOT empty'); }
[].length
表达式返回一个0
虚假值。
我们使用逻辑 NOT (!) 运算符来翻转假值,因此if
块运行。
以下是 JavaScript 中所有的假值。
索引.js
console.log(Boolean(false)); // 👉️ false console.log(Boolean(0)); // 👉️ false console.log(Boolean('')); // 👉️ false console.log(Boolean(null)); // 👉️ false console.log(Boolean(undefined)); // 👉️ false console.log(Boolean(NaN)); // 👉️ false