将JavaScript变量设置为null还是保持未定义?

72
在JavaScript函数顶部声明变量时,将它们设置为null还是保留为'undefined'最佳实践?换句话说,什么情况下需要使用以下每个选项?

选项A:

var a = null,
    b = null;

选项B:

var a,
    b;

5
我会选择选项 b - Mr. Alien
3
@Mr.Alien - 同意。除非变量的值为null而不是undefined真正有影响,否则没有理由使用= null版本。 - Michael Geary
实际上,var a, b; 不一定会*将其留空为 undefined*。在早期的IE版本中,您需要将该代码片段更改为var a = undefined, b = undefined;,否则您的代码在尝试访问它时会生成错误(即使您只是尝试使用 if (a && b) 简单检查它是否具有某些值)。在这种情况下,未设置的变量与 undefined 不同。 - falsarella
另一个问题是,内存管理是否有区别?https://stackoverflow.com/questions/68339963/is-it-better-to-leave-variables-undefined-set-them-to-null-or-set-them-to-initi - 1.21 gigawatts
9个回答

61

这要看情况。

  • "undefined" 表示该值不存在。 typeof 返回 "undefined"。

  • "null" 表示此值存在,但为空值。当你使用 typeof 来测试 "null" 时,你会发现它是一个对象。在将 "null" 值序列化到后端服务器(如 asp.net mvc)时,服务器将接收到 "null",但是当你序列化 "undefined" 时,服务器可能不会接收到值。


28

当我没有给变量赋值时,它们会被声明为未定义,因为毕竟它们是未定义的。


11
需要“赋值”未定义的变量吗?因为正如您所说,它们毕竟是未定义的? - VivekDev
7
提到了不需要声明 undefined,但是如果你声明了 undefined,那么在测试该值时,你无法知道是你有意设置的还是根本没有设置。因此,在可能没有值的情况下,我更喜欢使用 null。 - Ian Hoar

16

通常情况下,我会使用null来代表我所知道的可能有“null”状态的值;例如:

if(jane.isManager == false){
  jane.employees = null
}
否则,如果它是一个尚未定义(因此目前不可用)但应该稍后设置的变量或函数,我通常会保留其未定义状态。

9

一般来说,我将null定义为表示该值已由人设置,而undefined表示尚未进行设置。


5

我通常将其设置为我期望从函数返回的内容。

如果是字符串,那么我将其设置为空字符串='',对象也是{},数组=[],整数为0。

使用这种方法可以免去检查null/undefined的需要。无论结果如何,我的函数都知道如何处理字符串/数组/对象。


3

只有当您需要明确检查变量a是否设置为nullundefined时,才需要设置它(或不设置)。

if(a === null) {

}

...不等同于:

if(a === undefined) {

}

话虽如此,a == null && a == undefined将返回true

Fiddle


在这种情况下检查是否为空值并不好,因为它违反了JavaScript中“避免空比较”的最佳实践。你只应该针对DOM对象与null进行比较(http://my.safaribooksonline.com/book/programming/javascript/9781449328092/iidot-programming-practices/id2779483)。 - Khanh TO
我不同意;我们想要做的只是查看一个变量是否实际上为nullundefined - 这些都是完全有效的检查。我同意在你引用的例子中检查null是一个坏主意,但那只是一个例子 :) - jterry

3

如果您使用此值来分配某个对象的属性并稍后调用JSON.stringify,请小心 - 空值将保留,但未定义的属性将被省略,如下例所示:

var a, b = null;

c = {a, b};

console.log(c);
console.log(JSON.stringify(c)) // a omited

*或者一些类似的实用函数/库,其工作方式相似或使用JSON.stringify

1

我们需要了解 null 的两个特点:

  1. null 是一个空或不存在的值。
  2. null 必须被赋值。

你可以将 null 赋值给一个变量,表示当前该变量没有任何值,但以后会有值。null 表示缺少值。

例如:

 let a = null;
 console.log(a); //null

-19
你可以在Javascript中使用'';来声明空变量。

12
空字符串和 null 是两个非常不同的东西。 - mu is too short

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