知识卡片

null与undefined的语义分工

专业/工作 · 408

内容

null和undefined都表示”值的空缺”,==比较下两者相等,但语义分工不同:undefined代表系统级、出乎意料的空缺——变量声明了但未初始化、访问不存在的对象属性、函数没有return、调用时缺少的实参,这些都是运行时自动产生的”没想到会是空”的信号;null则代表程序级、在意料之中的空缺——是程序员主动赋予的”这里就是没有值”的显式声明。这个分工给出一条实用准则:凡是自己要主动表达”这个变量目前没有值”的场景,应该赋值null而不是undefined,把undefined留给语言自己去标记那些未初始化或未提供的情况,这样一旦读到undefined就能第一时间判断出是不是漏写了什么。

参考来源

《JavaScript权威指南(原书第6版)》第3章《类型、值和变量》