Typescript - null 和 undefined 有什么区别?

55
我想知道 TypeScript 中 null 和 undefined 的区别。我知道在 JavaScript 中可以使用它们来检查变量是否有值。但是在 TypeScript 中,我想确切地知道它们的区别,并且何时最好使用它们中的每一个。 谢谢。

3
差异与JavaScript中的相同:https://dev59.com/aW445IYBdhLWcg3wBVzz - cartant
6
@cartant 我认为将Typescript视为与javascript相同是不正确的。 事实上,Typescript样式指南(https://github.com/Microsoft/TypeScript/wiki/Coding-guidelines#null-and-undefined)建议仅使用undefined。原因在于,在Typescript中,问号表示可选项,可选项只能与undefined一起使用,而不能与null一起使用。这意味着两者之间存在很大的区别。就像Typescript是javascript的超集一样,因此javascript中的所有内容都是合法的。但理想情况下,您不应在Typescript中使用null。 - Elisha Sterngold
@ElishaSterngold 请阅读样式指南的第一部分,它仅适用于 TypeScript 本身的贡献者。在您自己的项目中使用 null 是没有问题的。此外,在 JS 中选择一个而不是另一个的任何风格原因都同样有效。 - John Montgomery
@ElishaSterngold 是的,原因就是“我们已经选择了许多团队一致性的人员。”他们说了两次这不是 TypeScript 社区的指南。 - John Montgomery
1
尽管 TypeScript 是 JavaScript 的超集,但我强烈反对将它们视为相等的。这不仅是基于风格上的原因。还存在意识形态上的差异。在 JavaScript 的动态特性中,我们希望区分不存在的键和缺失的值。通过适当使用类型和接口,我们应该知道某些键是否存在(无论是否有值)并进行类型检查。这使得拥有两个不同的“空”值变得过时,消除其中一个可以使事情更加清洁。我们应该保留 undefined,因为所有其他原因都已经提到。 - lhhong
显示剩余3条评论
2个回答

33

这篇文章很好地解释了它们的区别。在 TypeScript 中和在 JavaScript 中是一样的。

至于你应该使用什么:你可以自己定义。你可以使用任意一个,只需注意它们之间的区别,并保持一致可能是有意义的。

TypeScript 源代码的编码风格指南(不是官方的“如何使用 TypeScript”指南)指出,你应该始终使用 undefined 而不是 nullTypescript 项目风格指南


我可以想象这可能是因为检查(例如,在if语句中)或保持一致性的缘故。 - Spitzbueb
@AlexanderAbakumov 这里有一个解释。 - pushkin
30
请注意,这个风格指南是专门为那些对 TypeScript 做出贡献的人设计的,以确保 TypeScript 的一致性,而不是为了 TypeScript 程序员的整体使用。对于你自己的项目或者你的团队一致同意的方式,你可以随意进行任何操作。 - John Montgomery
3
@Pipo,也许这个链接就是我想要分享的内容。不过可能会有所不同。 - pushkin

12

数值 'undefined' 表示一个变量已经被声明,但是没有被赋任何值。因此,这个变量的值为 'undefined'。

另一方面,'null' 指的是一个不存在的对象,基本上意味着 '空' 或者 '无'。

你可以手动将数值 'undefined' 赋给一个变量,但这不被推荐。所以,'null' 被赋给一个变量来指定该变量不包含任何值或为空。但是 'undefined' 被用来检查变量是否在声明后被赋值。


8
请问您能提供“不建议”的任何来源吗? - Eugene
2
他可能指的是 https://github.com/Microsoft/TypeScript/wiki/Coding-guidelines#null-and-undefined。 - LorDex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接