停止使用 null ? 在 js中使用 undefined会更方便一些

125 阅读1分钟

最新看了 element-plus的源码,发现里面有一行注释

/**
 * @deprecated stop to use null
 * @see {@link https://github.com/sindresorhus/meta/discussions/7}
 */
export type Nullable<T> = T | null

在 js 中停止使用 null 。。。 感觉很有意思, 可以直接点击其中的链接查看

为什么要停止使用 null ???

js默认的空指定的是 undefined

  • 当我们访问一个对象中不存在的属性时,返回的就是 undefined
  • 在类型的定义上,js的默认初始值 和 默认返回值 都让 null 对比 undefined 显得有些多余
 type fn =  (count?: number) => void;
 type fn2 = (count?: number | null) => void;
 
 // 
 const obj = {};
 
 let  a:null | number;
 a = obj[a]; // 类型错误
 
  • 在 es6+ 语法中在进行对象解构的时候,如果属性的值为 null 时 我们将无法进行默认值的赋值
   const obj = {a: null};
   const {a = 'a', b = 'b'} = obj;
   
   console.log(a,b); // null , 'b'
  • typeof null === 'object'

不支持 undefined 的场景

  • json 中不支持 undefined
  • 浏览器 和 node 的 api 中 使用的是null作为返回值或者空类型

如何避免去使用 null ?

  • 在我们自己书写的 code 中尽量使用 undefined
  • 使用 eslint 去检查
  • 自定义 JSON.parse/stringify