将 javascript 变量初始化为空字符串而不是 null 是否存在技术问题?

我正在使用 axios 处理 API 调用并在响应中返回一些 JSON。我有一个变量将保存 JSON 对象的值之一的结果,在本例中是一个字符串:


let first_name = "";

//later on..

first_name = response.data.firstName;

我的手被打了一巴掌,因为我已经初始化first_name为一个空字符串而不是null我不知道为什么 - 进行代码审查的人嘟哝了一些关于最佳实践的事情,并没有真正回答我。


我的问题——如果我检查空字符串而不是稍后null使用first_name时,我将它初始化为什么重要吗?通过将变量设置为空字符串,是否有我错过的 javascript 最佳实践或优化?


[编辑]


关于我稍后在代码中如何使用的评论中的一些很好的讨论first_name。让我详细说明一下。


我不想做代码转储,所以让我这样说,在first_name分配之后我检查以确保它既不是空字符串也不是空字符串,然后再使用它。我在这里感兴趣的是我所做的是否在 JavaScript 术语中是错误的或低效的,或者比将其分配为空值“更糟糕”。我将它指定为字符串作为助记符,如果一切顺利,它应该是一个字符串值。


绝地无双
浏览 371回答 3
3回答

30秒到达战场

将 JavaScript 变量初始化为空字符串而不是 null 是否存在技术问题?这取决于上下文,但不存在直接的技术问题。从纯技术角度看,这并不重要,我们是否检查first_name === null,first_name === "",first_name === undefined或只!first_name。请注意,所有这些都非常特定于 JavaScript,因为许多其他语言要么没有,Null要么使用完全不同的模型来指示值的缺失。null 与字符串让我们进一步分析这个问题,以了解您的审稿人的推理。null 不是字符串最后first_name是一些返回字符串的计算结果。如果该字符串可以是空字符串"",则使用null, as是合理的null !== ""。我们可以在没有额外first_name_set标志或类似的情况下检查有效值的缺失。如果我们使用null,那么我们永远不会从有效值域中汇集我们的初始值,这对于调试、错误处理和健全性检查来说是一个福音。"" 可能永远无效但是,如果first_name永远不会是空字符串,则空字符串可能是我们无效数据的有效候选者。必须解释最佳实践但这种解释null是可以接受的。另一方面,您的审稿人的推理在于他们的心态。如果这是他们认为的最佳实践,那么它可能是整个公司的“最佳实践”。这并不一定意味着它也是现实世界中的最佳实践,因为在拥有大量自学程序员的公司中,一些奇怪的误解可能由来已久。作为被审查者,您的最佳做法是质疑他们的推理。一个好的代码审查提高了审查代码,更好的代码审查教好做法,但最好的代码审查提高整体的代码库,并教两个侧面。初始化备注话虽如此,这两种变体都对开发人员施加了额外的压力:我们被迫检查我们的值是否有效。更好的解决方案(如果可能)是摆脱无效的初始化,只使用正确的值进行初始化。async并且await可以使我们能够在回调情况下这样做。

繁星淼淼

我认为您的审稿人正在考虑:使用空状态没有数据可用。使用空字符串状态数据可用(从 api 返回)。我也同意在这个意义上使用 null 将是最佳实践。

白猪掌柜的

first_name仅当有可能first_name = response.data.firstName不会执行并且之后的代码从first_name以下位置读取时,使用值进行初始化才有意义:let first_name;if( ... ) {   first_name = response.data.firstName;}// ...doSomething(first_name)或者let first_name;try {   // some code   first_name = response.data.firstName;} catch(err) {}// ...doSomething(first_name)因为那样你可以确保一些默认值。但是,如果有什么之间let first_name;和first_name = response.data.firstName;再初始化的first_name无厘头,并宣布它早期没有意义无论是。所以应该是:let first_name = response.data.firstName;// ...doSomething(first_name)将所有声明的函数的开始是从时间的遗物,其中let并const没有用,因为发动机/编译器不会警告你:function foo() {   console.log(bar)   // ...   var bar = 2; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript