了解 JavaScript 的真实性和虚假性
Understanding JavaScript Truthy and Falsy
有人可以使用以下示例数据解释JavaScript Truthy和Falsy吗?我已经阅读了其他线程,但仍然感到困惑。
var a = 0;
var a = 10 == 5;
var a = 1;
var a = -1;
根据我的理解,我相信var a = 1;
是唯一真实的,其余的都是虚假的——这是正确的吗?
根据我的理解,我相信var a = 1;是唯一真实的,其余的都是虚假的 - 这是正确的吗?
不。
-
变量 a = 0;
数字零是假的。但是,请注意,字符串零
"0"
是真实的。 -
变量 a = 10 == 5;
这和
var a = (10 == 5);
一样,所以这是假的。 -
变量 a = 1;
变量 a = -1;
任何包括负数在内的非零数都是真实的。
引用自MDN
在 JavaScript 中,真值是在布尔上下文中评估时转换为 true 的值。所有值都是真值,除非它们被定义为假值(即,除了
false
、0
、""
、null
、undefined
和NaN
)。
JavaScript 中的 falsy 值列表: 来自 MDN
-
false
-
null
-
undefined
-
0
-
NaN
-
''
、""
、``
(空模板字符串) -
document.all
-
0n
: BigInt -
-0
有一个简单的检查方法,你可以现在和永远使用:
function truthyOrFalsy(a) {
return a ? "truthy" : "falsy";
}
即:
> truthyOrFalsy(0)
"falsy"
> truthyOrFalsy(10 == 5)
"falsy"
> truthyOrFalsy(1)
"truthy"
> truthyOrFalsy(-1)
"truthy"
另请参阅 JavaScript 中所有 falsey 值的列表。
Truthy -> 在布尔上下文中解析为 true 的值
Falsy -> 在布尔上下文中解析为 false 的值
为了更好地理解,下面给出了"虚假"值。
-
false
-
0
-
empty string
-
null
-
undefined
-
NaN
FALSY
- 假
- 0(零)
- ", ", "(空字符串)
- 零
- 定义
- NaN(不是数字)
注意:空数组 ([]) 不是假的
真实
- 一切不是假的
下面的答案可能会对某人有所帮助。
除了类型之外,每个值还有一个固有的布尔值,通常称为 true 或 falsy。有些规则有点奇怪,因此了解概念和对比较的影响有助于调试 JavaScript 应用程序。
以下值始终是假的:
- 假
- 0(零)
- -0(减零)
- 0n (BigInt zero) '
- ', ", '' (空字符串)
- 零
- 定义
- 南
其他一切都是真实的。这包括:
- "0"(包含单个零的字符串) "false
- "(包含文本"false"的字符串)
- [](空数组)
- {}(空对象)
- function(){} (an "empty" function)
因此,可以在条件中使用单个值。例如:
if (value) { // value is truthy } else { // value is falsy // it could be false, 0, '', null, undefined or NaN }
还有一个检查版本:
function truthyOrFalsy(a) {
return (a && "truthy") || "falsy";
}
只有 6 种类型的虚假值:您可以使用此代码段来测试它们:
function isTruthy(val){
if(val){
console.log(val + ' is Truthy');
}else{
console.log(val + ' is falsy');
}
}
// all below are truthy
isTruthy (true)
isTruthy ({})
isTruthy ([])
isTruthy (42)
isTruthy ("0")
isTruthy ("false")
isTruthy (new Date())
isTruthy (-42)
isTruthy (12n)
isTruthy (3.14)
isTruthy (-3.14)
isTruthy (Infinity)
isTruthy (-Infinity)
//all below are falsy
isTruthy(0);
isTruthy("");
isTruthy(false);
isTruthy(NaN);
isTruthy(null);
isTruthy(undefined);
有关详细信息,请参阅此站点:https://developer.mozilla.org/en-US/docs/Glossary/Falsy
假值和真值的简单方法
function truthyOrFalsy(val){
if(val){
console.log (`${val} is truthy`);
} else{
console.log (`${val} is falsy`);
}
}
检查所有 FALSY 值:
truthyOrFalsy(false); //Output: false is falsy
truthyOrFalsy(null); //Output: null is falsy
truthyOrFalsy(0); //Output: 0 is falsy
truthyOrFalsy(''); //Output: is falsy [blank refers to '']
truthyOrFalsy(NaN); //Output: NaN is falsy
truthyOrFalsy(undefined); //Output: undefined is falsy
请注意,
undefined
未明确用于设置为值。一些常见方案将创建未定义:在函数中
- 定义的参数,但未在回调函数中传递参数。
- 如果函数中没有任何返回
- 如果访问未定义的对象属性/方法
- 如果访问未定义的数组元素
function add(num1, num2){
console.log(num1, num2);
}
const result = add(44);
console.log(result);
//Output: 44 undefined
// undefined
const car = {color:"Blue", price: 200000};
console.log(car.category);
//Output: undefined
arrColors = ["Blue", "Sky", "Purple"];
console.log(arrColors[5]);
//Output: undefined
检查所有真实值
所有值都是真实的,除非它们被定义为虚假的。
尽管可以招募
' ', '0', -1, []
进行检查。
truthyOrFalsy(' '); //Output: is truty [blank refers to space inside
// quote ]
truthyOrFalsy('0'); //Output: 0 is truty
truthyOrFalsy([]); //Output: is truty [blank refers to an empty array]
truthyOrFalsy(-1); //Output: -1 is truty
另一种评估我喜欢使用的事物是真实还是虚假的方法是
function truthyOrFalsy(a) {
return !!a;
}