我想知道JavaScript中null和undefined之间的区别。


当前回答

null是一个特殊的关键字,表示缺少值。

将其视为一种价值,例如:

“foo”是字符串,true为布尔值,1234是数字,null未定义。


undefined属性表示尚未为变量分配包含null的值。喜欢

var foo;

定义的空变量为null,数据类型为undefined


它们都表示一个没有值的变量的值

以及null不表示没有值的字符串-空字符串-


Like

var a = ''; 
console.log(typeof a); // string 
console.log(a == null); //false 
console.log(a == undefined); // false 

现在如果

var a;
console.log(a == null); //true
console.log(a == undefined); //true 

BUT

var a; 
console.log(a === null); //false 
console.log(a === undefined); // true

所以每个人都有自己的使用方法

undefined使用它来比较变量数据类型

null使用它来清空变量的值

var a = 'javascript';
a = null ; // will change the type of variable "a" from string to object 

其他回答

const data  = { banners: null }
const { banners = [] } = data;
console.log(data)      // null


const data  = { banners: undefined }
const { banners = [] } = data;
console.log(data)      // []

Null始终是内存中存在的未知对象,而undefined则不是。

当您在javascript中声明一个变量时,它被赋值为undefined。这意味着变量是未被修改的,可以在将来分配任何值。这也意味着您不知道该变量在声明时将保持的值。

现在可以显式地将变量赋值为null。这意味着变量没有任何值。例如,有些人没有中间名。因此,在这种情况下,最好将值null赋给person对象的中间名变量。

现在假设某人正在访问person对象的中间名变量,并且该变量的值未定义。他不知道开发人员是否忘记初始化这个变量,或者它是否没有任何值。如果它的值为null,那么用户可以很容易地推断middlename没有任何值,并且它不是一个未触及的变量。

已经给出了很多“技术性”的答案,从JS仅仅是一种编程语言的有限角度来看,所有答案都是正确的。

然而,我想补充以下想法,特别是当您将TypeScript代码作为更大项目/(企业)应用程序的一部分时:

当与某种后端交谈时,您很可能会收到JSON虽然一些后端正确地避免了在JSON中使用“null”(删除那些财产),但其他后端没有这样做现在,虽然“null”可能意味着该值是故意缺失的,但更多情况下,它并没有传达这一含义。大多数数据库使用“null”只是因为它们没有“undefined”类型。但真正的含义只是“未定义”。因此,您永远无法知道“null”值是否真的意味着故意缺席。因此,“空”并不意味着故意选择“缺失值”。一般来说,这是无法决定的。因此,在语义上,“null”和“undefined”实际上是完全相同的。

因此,为了协调一致,我坚决反对使用“null”,并希望鼓励您停止在代码中使用“null“。这比你想象的要容易得多。别误会我。我不是说不处理“null”值,只是为了避免在代码中显式使用它们。换句话说:您的代码应该仍然能够处理来自应用程序外部的意外传递的“null”值,例如通过第三方库(如Angular)或第三方后端。

以下是实现这一目标的指导原则:

避免直接的未定义类型保护(例如,如果(值==未定义){…}。相反,使用间接类型保护(也称为真实性检查),例如if(value){…}每当0或空字符串有意义时,请使用像Lodash的isNil这样的显式助手方法或在比较中包含有意义的值(例如,如果(!value&&value!==0){…})考虑使用不允许使用null的lint规则

undefined表示变量已声明但尚未赋值:

var测试var;console.log(testVar)//显示未定义console.log(testVar类型)//显示未定义

null是赋值。它可以作为无值表示分配给变量:

var testVar=空;console.log(testVar)//显示nullconsole.log(testVar类型)//显示对象

从前面的示例中可以清楚地看到,undefined和null是两种不同的类型:undefineed是类型本身(undefine),而null是对象。

证明:

console.log(null==未定义)//false(类型不同)console.log(null==undefined)//true(但为“相同值”)console.log(null==null)//true(类型和值相同)

and

null = 'value' // Uncaught SyntaxError: invalid assignment left-hand side
undefined = 'value' // 'value'