上一篇
最近ECMAScript 2025草案中关于"空值"的讨论又火了🔥,TC39委员会正在考虑为undefined增加新的语法糖,不过别急,在我们追新之前,先把这两个"空值兄弟"的区别彻底搞懂!
let a = null; // 这是程序员主动设置的"空值" let b = undefined; // 这是系统默认的"未定义"
想象你有个收纳盒🧳:
null
= 你明确告诉别人"盒子里是空的"undefined
= 别人打开发现"根本没放东西进去"typeof null // "object" 😅 (著名历史遗留问题) typeof undefined // "undefined"
有趣的是,这个bug从1995年JavaScript诞生就存在!Brendan Eich本人承认这是个设计失误,但现在修改会破坏整个互联网🌐,所以一直保留着。
null == undefined // true (抽象相等) null === undefined // false (严格相等)
这就像:
function test(a = "default") { console.log(a); } test(null) // 输出 null 🎯 test(undefined) // 输出 "default"
这里有个实用技巧💡:用undefined触发默认参数,用null保留显式空值。
JSON.stringify({a: null, b: undefined}) // 输出 '{"a":null}'
undefined在JSON中会直接消失!就像发邮件时:
据2025年8月TC39会议记录📝,正在讨论的"undefined快捷语法":
let x = _; // 提案中的新写法,等价于 let x = undefined;
不过目前Stage 1阶段,日常开发还是建议:
let x = null
而非let x
x === null
或typeof x === 'undefined'
记住这个比喻🎭:
下次面试被问到这个问题,你就可以从容地说:"这要从1995年的一个设计决策讲起..." 😎
本文由 诺曼容 于2025-08-02发表在【云服务器提供商】,文中图片由(诺曼容)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/517364.html
发表评论