a == a?a:b和a?a:b之间的差异

时间:2018-06-04 11:13:56

标签: javascript

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

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

2 个答案:

答案 0 :(得分:8)

第一个语句将始终返回true,但aNaN

的情况除外
  

为什么NaN == NaN会返回false?

因为JS规范says so

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

仅当true不是a变量时,第二个语句才会返回falsy

当我说falsy我的意思是未定义 null 0 '' falsy 值是在布尔上下文中进行评估时转换为的值。

Truthy

  

在JavaScript中,truthy值是在布尔上下文中计算时被视为true的值。除非将它们定义为假(即,除了false,0,“”,null,undefined和NaN),否则所有值都是真实的。

Falsy

  

虚假值是在布尔上下文中计算时转换为false的值。

答案 1 :(得分:0)

a == a返回布尔值而 a只是一个数字。

a == a始终为真,而a为真(可以这样称)只有当a为非0

--------------------------------------- EDIT ------- --------------------------------

在你的代码中输入a = 0,你会看到差异