【发布时间】:2016-06-09 03:25:34
【问题描述】:
有人可以使用下面的示例数据解释 JavaScript 的真假。我已经阅读了其他主题,但仍然感到困惑。
var a = 0;
var a = 10 == 5;
var a = 1;
var a = -1;
根据我的理解,我相信var a = 1; 是唯一真实的,其余的都是虚假的 - 这是正确的吗?
【问题讨论】:
标签: javascript
有人可以使用下面的示例数据解释 JavaScript 的真假。我已经阅读了其他主题,但仍然感到困惑。
var a = 0;
var a = 10 == 5;
var a = 1;
var a = -1;
根据我的理解,我相信var a = 1; 是唯一真实的,其余的都是虚假的 - 这是正确的吗?
【问题讨论】:
标签: javascript
根据我的理解,我相信 var a = 1;是唯一真实的,其余的都是虚假的 - 这是正确的吗?
没有。
var a = 0;
数字零是虚假。但是,请注意字符串零 "0" 是真的。
var a = 10 == 5;
这与var a = (10 == 5); 相同,所以这是falsy。
var a = 1;
var a = -1;
包括负数在内的任何非零数都是真实的。
引用MDN
在 JavaScript 中,truthy 值是在布尔上下文中计算时转换为 true 的值。所有值都是真实,除非它们被定义为falsy(即,
false、0、""、null、undefined和NaN)。
JavaScript 中的虚假值列表:From MDN
falsenullundefined0NaN'', "", ``(空模板字符串)document.all0n: 大整数-0 【讨论】:
document.all是假的??
document.all 过去曾用于浏览器检测,HTML 规范在这里定义了故意违反 ECMAScript 标准以保持与遗留代码的兼容性(if (document.all) { // Internet Explorer code here } 或使用document.all 不先检查其存在:document.all.foo)。
var a = 10 == 5; 之外的其他情况肯定包含在so dupe 中。所以,IMO 不应该被当作骗子关闭。
有一种简单的检查方法,您可以现在和永远使用它:
function truthyOrFalsy(a) {
return a ? "truthy" : "falsy";
}
也就是说:
> truthyOrFalsy(0)
"falsy"
> truthyOrFalsy(10 == 5)
"falsy"
> truthyOrFalsy(1)
"truthy"
> truthyOrFalsy(-1)
"truthy"
【讨论】:
Truthy -> 在布尔上下文中解析为 true 的值
Falsy -> 在布尔上下文中解析为 false 的值
false0empty stringnullundefinedNaN【讨论】:
假
注意:空数组 ([]) 不是假的
真实
【讨论】:
以下答案可能对某人有所帮助。
除了类型之外,每个值还具有固有的布尔值,通常称为真值或假值。有些规则有点奇怪,因此了解概念和比较效果有助于调试 JavaScript 应用程序。
以下值总是假的:
其他的都是真实的。其中包括:
因此可以在条件中使用单个值。例如:
if (value) { // value is truthy } else { // value is falsy // it could be false, 0, '', null, undefined or NaN }
【讨论】:
在 JavaScript 中,&& 和 || 并不总是产生布尔值。两个运算符始终返回其操作数表达式之一的值。使用双重否定 !! 或 Boolean 函数,“truthy”和“falsy”值可以转换为正确的布尔值。
true && true =>
true
true && false =>
false
true && 'rahul626'=>
"rahul626"
true && 'i am testing Truthy' && ' upvote it'=>
" upvote it"
【讨论】:
另一个检查版本:
function truthyOrFalsy(a) {
return (a && "truthy") || "falsy";
}
【讨论】:
简而言之,只有 6 种类型的 falsy 值: 你可以使用这个 sn-p 来测试它们:
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未明确用于设置值。 一些常见的场景会创建 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;
}
【讨论】: