3 回答
![?](http://img1.sycdn.imooc.com/54584cd10001404b02200220-100-100.jpg)
TA贡献1828条经验 获得超6个赞
将 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
可以使我们能够在回调情况下这样做。
![?](http://img1.sycdn.imooc.com/54584de700017cbd02200220-100-100.jpg)
TA贡献1893条经验 获得超10个赞
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;
}
添加回答
举报