- undefined和null是两个独立类型,它们各自都只有一个值
- 它们两个的名字即是类型也是对应的值
- 对于没有声明类型的变量,赋值为undefined或null,ts会推断其类型为any,这时需要打开strictNullChecks编译选项才会报错
- 作为值,它们有一个特殊的地方:任何其他类型的变量都可以赋值为undefined或null
- 变量如果等于undefined就表示还没有赋值,如果等于null就表示值为空
- 如果变量名为obj,类型为object,obj变量等于undefined,调用obj.toString()的时候,编译不会报错,运行时就会报错,为了避免这种情况,及早发现错误,ts提供了一个编译选项strictNullChecks,打开这个选项,undefined和null就不能赋值给其他类型的变量(除了any和unknown类型,还有其自身)
- 打开strictNullChecks之后,undefined和null只能赋值给自身,或者any和unknown类型