TypeScript/JavaScript ?? 遇到的坑

null undefined NaN 的区别

  • null
    • null表示缺少的标识,指示变量未指向任何对象。把null作为尚未创建的对象更好理解。在API中,null常在返回类型应是一个对象,但没有关联的值的地方使用。
  • undefined
    • undefined是全局对象的一个属性。它是全局作用域的一个变量。undefined的最初值就是原始数据类型undefined。一个函数如果没有使用return语句指定返回值,就会返回一个undefined值。
  • NaN
    • NaN是一个全局对象的属性。编码中很少直接使用到NaN。通常都是在计算失败时,作为Math的某个方法的返回值出现的或者尝试将一个字符串解析成数字但失败了的时候。

??的坑

TypeScript使用??时容易忽略的点

1
2
3
4
5
6
7
8
9
let a = undefined;
let b = +a;

a ?? 0 // 0
b ?? 0 // NaN
b ? 1 : 0 // 0

undefined + string // 拼接字符串
undefined + number // NaN

NaN 不能用??来直接赋值。