在JavaScript函数顶部声明变量时,将它们设置为null还是保留为'undefined'最佳实践?换句话说,什么情况下需要使用以下每个选项?
选项A:
var a = null,
b = null;
选项B:
var a,
b;
选项A:
var a = null,
b = null;
选项B:
var a,
b;
这要看情况。
"undefined" 表示该值不存在。 typeof
返回 "undefined"。
"null" 表示此值存在,但为空值。当你使用 typeof
来测试 "null" 时,你会发现它是一个对象。在将 "null" 值序列化到后端服务器(如 asp.net mvc)时,服务器将接收到 "null",但是当你序列化 "undefined" 时,服务器可能不会接收到值。
当我没有给变量赋值时,它们会被声明为未定义,因为毕竟它们是未定义的。
通常情况下,我会使用null来代表我所知道的可能有“null”状态的值;例如:
if(jane.isManager == false){
jane.employees = null
}
否则,如果它是一个尚未定义(因此目前不可用)但应该稍后设置的变量或函数,我通常会保留其未定义状态。一般来说,我将null
定义为表示该值已由人设置,而undefined
表示尚未进行设置。
我通常将其设置为我期望从函数返回的内容。
如果是字符串,那么我将其设置为空字符串='',对象也是{},数组=[],整数为0。
使用这种方法可以免去检查null/undefined的需要。无论结果如何,我的函数都知道如何处理字符串/数组/对象。
只有当您需要明确检查变量a
是否设置为null
或undefined
时,才需要设置它(或不设置)。
if(a === null) {
}
...不等同于:
if(a === undefined) {
}
话虽如此,a == null && a == undefined
将返回true
。
null
或undefined
- 这些都是完全有效的检查。我同意在你引用的例子中检查null
是一个坏主意,但那只是一个例子 :) - jterry如果您使用此值来分配某个对象的属性并稍后调用JSON.stringify
,请小心 - 空值将保留,但未定义的属性将被省略,如下例所示:
var a, b = null;
c = {a, b};
console.log(c);
console.log(JSON.stringify(c)) // a omited
JSON.stringify
我们需要了解 null 的两个特点:
你可以将 null 赋值给一个变量,表示当前该变量没有任何值,但以后会有值。null 表示缺少值。
例如:
let a = null;
console.log(a); //null
'';
来声明空变量。null
是两个非常不同的东西。 - mu is too short
b
。 - Mr. Aliennull
而不是undefined
真正有影响,否则没有理由使用= null
版本。 - Michael Gearyvar a, b;
不一定会*将其留空为undefined
*。在早期的IE版本中,您需要将该代码片段更改为var a = undefined, b = undefined;
,否则您的代码在尝试访问它时会生成错误(即使您只是尝试使用if (a && b)
简单检查它是否具有某些值)。在这种情况下,未设置的变量与undefined
不同。 - falsarella