首页 > 解决方案 > a==a?a:b 和 a?a:b 的区别

问题描述

两者都是一样的。那么它们之间有什么区别呢?

let a=NaN;
let b=2.2
console.log(a==a?a:b);
console.log(a?a:b);

标签: javascript

解决方案


第一条语句将始终返回true,除了 when aisNaN

为什么NaN == NaN返回 false ?

因为 JS 规范是这样说的:

  • 如果 Type(x) 是 Number,那么
    • 如果 x 是 NaN,则返回 false。
    • 如果 y 是 NaN,则返回 false。

只有当不是变量时,第二条语句才会返回。trueafalsy

当我说falsy我的意思是undefined , null , 0 , ''。假值是在布尔上下文中评估时转换为假的值。

实话实说

在 JavaScript 中,真值是在布尔上下文中评估时被认为是真的值。所有值都是真实的,除非它们被定义为虚假(即,除了 false、0、“”、null、undefined 和 NaN)。

假的

假值是在布尔上下文中评估时转换为假的值。


推荐阅读