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

将javascript变量初始化为空字符串而不是空字符串是否存在技术问题?,javascript,Javascript,我正在使用axios处理一个API调用,并在响应中返回一些JSON。我有一个变量,它将保存JSON对象值之一的结果,在本例中为字符串: let first_name = ""; //later on.. first_name = response.data.firstName; 我被打了一巴掌,因为我把first_name初始化为空字符串而不是null,我不知道为什么——做代码审查的人咕哝了一些关于最佳实践的事情,并没有真正回答我 我的问题-如果我在以后使用first_name时检查的是空字符

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

let first_name = "";
//later on..
first_name = response.data.firstName;
我被打了一巴掌,因为我把first_name初始化为空字符串而不是null,我不知道为什么——做代码审查的人咕哝了一些关于最佳实践的事情,并没有真正回答我

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

[编辑]

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


我不想进行代码转储,所以让我这样说,在分配了first_name之后,我会在使用它之前检查它是否为空字符串或null。我在这里感兴趣的是,我所做的是错误的还是效率低下的,还是比将其赋值为null更糟糕。我将其指定为字符串作为助记符,如果一切顺利,它应该是字符串值。

我认为您的审阅者正在考虑:

使用空状态没有可用的数据。 使用空字符串状态可以从api返回数据。
我也同意,从这个意义上讲,使用null将是最佳实践。

我认为您的评论者正在考虑:

使用空状态没有可用的数据。 使用空字符串状态可以从api返回数据。 我也同意在这个意义上使用null将是最佳实践

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

这取决于上下文,但不存在直接的技术问题。从纯技术的角度来看,我们是否检查first_name===null、first_name===、first_name===undefined或just并不重要!名字

请注意,所有这些都非常特定于JavaScript,因为许多其他语言要么没有Null,要么使用完全不同的模型来表示没有值

空对字符串 让我们进一步分析一下这个问题,以了解您的评论者的理由

null不是字符串 最后,first_name是返回字符串的某些计算的结果。如果该字符串可以是空字符串,那么使用null是合理的,因为null!==。我们可以检查是否缺少有效值,而无需附加first_name_set标志或类似标志

如果我们使用null,那么我们永远不会从有效值的域中汇集初始值,这对调试、错误处理和健全性检查是一个福音

可能永远都不会有效 但是,如果first_name永远不会是空字符串,那么空字符串可能是无效数据的有效候选

必须解释最佳做法 但是这种对null的解释是可以理解的。另一方面,你的评论者的理由在于他们的思维方式。如果他们认为这是最佳实践,那么这可能是整个公司的最佳实践。这并不一定意味着这也是现实世界中的最佳实践,因为在有很多自学成才的程序员的公司里,一些奇怪的误解可能有着悠久的传统。作为被审查者,你的最佳做法是质疑他们的推理

一个好的代码评审会改进被评审的代码,一个好的代码评审会教给我们更好的实践,但是最好的代码评审会改进整个代码库,并教给双方

关于初始化的注记 也就是说,这两种变体对开发人员施加了额外的压力:我们被迫检查我们的值是否有效。如果可能的话,更好的解决方案是去掉无效的初始化,只使用正确的值进行初始化。async和await可以使我们在回调情况下这样做

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

这取决于上下文,但不存在直接的技术问题。从纯技术的角度来看,我们是否检查first_name===null、first_name===、first_name===undefined或just并不重要!名字

请注意,所有这些都非常特定于JavaScript,因为许多其他语言要么没有Null,要么使用完全不同的模型来表示没有值

空对字符串 让我们进一步分析一下这个问题,以了解您的评论者的理由

null不是字符串 最后,first_name是返回字符串的某些计算的结果。如果该字符串可以是空字符串,那么使用null是合理的,因为null!==。我们可以检查是否缺少有效值,而无需附加first_name_set标志或类似标志

如果我们使用null,那么我们就永远不会将 来自有效值域的初始值,这对调试、错误处理和健全性检查是一个福音

可能永远都不会有效 但是,如果first_name永远不会是空字符串,那么空字符串可能是无效数据的有效候选

必须解释最佳做法 但是这种对null的解释是可以理解的。另一方面,你的评论者的理由在于他们的思维方式。如果他们认为这是最佳实践,那么这可能是整个公司的最佳实践。这并不一定意味着这也是现实世界中的最佳实践,因为在有很多自学成才的程序员的公司里,一些奇怪的误解可能有着悠久的传统。作为被审查者,你的最佳做法是质疑他们的推理

一个好的代码评审会改进被评审的代码,一个好的代码评审会教给我们更好的实践,但是最好的代码评审会改进整个代码库,并教给双方

关于初始化的注记
也就是说,这两种变体对开发人员施加了额外的压力:我们被迫检查我们的值是否有效。如果可能的话,更好的解决方案是去掉无效的初始化,只使用正确的值进行初始化。async和await可以让我们在回调情况下这样做。

我知道javascript支持所有这些错误值

错误的 零零 “”空字符串 无效的 未定义 南不是一个数字 它直接指示null和空字符串都是false。所有这些都取决于用例。根据您的用例,可以使用空字符串。但是,我仍然建议使用null来实现这些更好的改进

Null是表示没有可用数据的最佳实践。 空字符串表示提供了空数据,null表示未提供数据。 空数据可能会通过提供对类成员的访问而使您产生错误代码,而返回为null的数据属于null异常,并阻止您生成错误代码。
我知道javascript支持所有这些错误的值

错误的 零零 “”空字符串 无效的 未定义 南不是一个数字 它直接指示null和空字符串都是false。所有这些都取决于用例。根据您的用例,可以使用空字符串。但是,我仍然建议使用null来实现这些更好的改进

Null是表示没有可用数据的最佳实践。 空字符串表示提供了空数据,null表示未提供数据。 空数据可能会通过提供对类成员的访问而使您产生错误代码,而返回为null的数据属于null异常,并阻止您生成错误代码。 只有当first_name=response.data.firstName可能不会被执行并且之后的代码从first_name读取时,使用值初始化first_name才有意义:

因为这样可以确保一些默认值

但是,如果两者之间没有什么区别,就让我们说出第一个名字;和first_name=response.data.firstName;那个么初始化first_名称是并没有意义的,而声明early也并没有意义

因此,它应该是:

let first_name = response.data.firstName;
// ...
doSomething(first_name)
将所有声明移到函数开头是let和const不可用时的遗留问题,因为引擎/编译器不会警告您:

function foo() {
   console.log(bar)

   // ...

   var bar = 2; 
}
只有当first_name=response.data.firstName可能不会被执行并且之后的代码从first_name读取时,使用值初始化first_name才有意义:

因为这样可以确保一些默认值

但是,如果两者之间没有什么区别,就让我们说出第一个名字;和first_name=response.data.firstName;那个么初始化first_名称是并没有意义的,而声明early也并没有意义

因此,它应该是:

let first_name = response.data.firstName;
// ...
doSomething(first_name)
将所有声明移到函数开头是let和const不可用时的遗留问题,因为引擎/编译器不会警告您:

function foo() {
   console.log(bar)

   // ...

   var bar = 2; 
}

不,但是让first_名称更短,并且分配未定义的。。。注意:如果有人告诉你在这种情况下让first_name=null比让first_name=更可取,那么他对它的了解就比你少:当它不包含有意义的值时,将它初始化为任何东西都是奇怪的-代码的读者可能会想,为什么要显式地将它指定给特定的值?。改为选中“未定义”-或者,更好的做法是,仅在第一次将变量赋值给时声明变量,使用const@CertainPerformance-const意味着以后不能分配给它-很明显代码想要这样做that@CertainPerformance-我明白你的意思,例如,声明变量在何处使用代码评审人员喃喃自语地讲述了一些最佳实践,但没有真正回答我关于代码评审最好的一点是指导和教学的能力。请你的评论者解释,不要含糊其辞
o、 但是让first_名称更短,并且赋值未定义。。。注意:如果有人告诉你在这种情况下让first_name=null比让first_name=更可取,那么他对它的了解就比你少:当它不包含有意义的值时,将它初始化为任何东西都是奇怪的-代码的读者可能会想,为什么要显式地将它指定给特定的值?。改为选中“未定义”-或者,更好的做法是,仅在第一次将变量赋值给时声明变量,使用const@CertainPerformance-const意味着以后不能分配给它-很明显代码想要这样做that@CertainPerformance-我明白你的意思,例如,声明变量在何处使用代码评审人员喃喃自语地讲述了一些最佳实践,但没有真正回答我关于代码评审最好的一点是指导和教学的能力。请您的评论者解释,但不要含糊其辞。我同意,尽管它对大多数其他语言的适用性比区分null和未定义的JavaScript强得多。我同意,尽管它对大多数其他语言的适用性比区分null和未定义的JavaScript强得多。