JavaScript中null与undefined的区别

历史背景

nullundefined都可以表示“没有”,含义非常相似。将一个变量赋值为undefinednull,语法效果几乎没区别

if语句中,它们都会被自动转为false,相等运算符(==)甚至直接报告两者相等

if (!undefined) {
    console.log('undefined is false');
}
// undefined is false

if (!null) {
    console.log('null is false');
}
// null is false

undefined == null
// true

JavaScript 诞生时,最初像 Java 一样,只设置了null表示"无"。根据 C 语言的传统,null可以自动转为0

Number(null) // 0
5 + null // 5

但是null存在两个问题

  • null就像在 Java 里一样,被当成一个对象,但是表示“无”的值最好不是对象
  • 如果null自动转为0,很不容易发现错误

因此出现了undefined以便区分,null是一个表示“空”的对象,转为数值时为0undefined是一个表示"此处无定义"的原始值,转为数值时为NaN

Number(undefined) // NaN
5 + undefined // NaN

null 与 undefined 的用法

  • null表示空值,即该处的值现在为空。调用函数时,某个参数未设置任何值,这时就可以传入null,表示该参数为空
  • undefined表示变量未定义,在函数中若忘记传参数则参数会显示undefined,表示在传参过程中出现了问题
var a = null;

function f(x) {
    return x;
}
console.log(f(a)); // null
console.log(f()); // undefined

总结来说,null可以在未设置值时起到暂时顶替的作用,就像 Html 中写<a>标签时先用#来顶替未设定的超链接,而undefined则更像是一种警告机制,当结果中出现undefined的时候,就知道有变量为赋值或函数未传参,就会更便于纠错

个人认为,undefined的出现就是帮助null分担纠错任务,防止出现未传入参数之类的问题,在早期 JavaScript 不包括错误处理机制时更易于维护

本文参考地址:阮一峰JavaScript 教程 - null, undefined 和布尔值

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容