# JavaScript 中的`undefined` vs `null`

> 原文： [https://howtodoinjava.com/typescript/undefined-vs-null/](https://howtodoinjava.com/typescript/undefined-vs-null/)

如果变量已经声明但尚未初始化，则称其为“`undefined`”。 而“`null`”被分配给当时没有**值**的变量。

简单来说，当您不为变量赋值时，JavaScript 引擎会将其视为`undefined`。 `null`值是由程序员分配的，以指示变量内部没有变量，但打算在以后的程序执行中使用该值。

## `undefined`

请参阅下面的 JavaScript 语句以了解`undefined`。

```java
var myVar;		//Variable declaration without assigning any value to it

console.log( myVar );	//undefined

console.log( typeof(myVar) );	//undefined

console.log( undeclaredVar );	//Uncaught ReferenceError: undeclaredVar is not defined

```

如果看到一个值`undefined`的变量，则说明：

1.  该变量已在程序中声明。
2.  变量没有赋值。
3.  如果检查变量`type`，它将是`undefined`。 请注意，这是 JavaScript 中的原始类型之一：字符串，数字，布尔值，`null`，`undefined`，符号（ES6 中的新增功能）。
4.  如果函数返回`undefined`，则未返回任何值。

> `undefined`在 JavaScript 中不是保留关键字。

## `null`

`null`表示故意缺乏的值。 从概念上讲，它与 Java，C# 等其他编程语言中的`null`非常相似。`null`表示缺少标识，表示变量指向没有对象。

```java
var myVar = null;		//Variable declared and assigned to null

console.log( myVar );	//null

console.log( typeof(myVar) );	//object

```

请注意，`null`的类型为`object`，具有有效值，无属性，不可更改，并且系统中始终只存在相同的单个实例。

## 将相等运算符与`null`和`undefined`一起使用

当您想清楚地区分`null`和`undefined`变量时，请始终记住使用严格相等运算符（`===`）将变量与`null`和`undefined`进行比较。

> 了解更多：JavaScript 中的[`==` vs `===`](https://howtodoinjava.com/typescript/equals-vs-strict-equals/)

```java
var myUndefinedVar;			//undefined
var myNullVar = null;		//null

myUndefinedVar == myNullVar;		//true - which not correct as both are different	

myUndefinedVar === myNullVar;		//false - correct behavior

```

## `null`等于零

`null`和`undefined`之间的主要区别在于将它们转换为原始类型的方式。

*   `null`在执行基本操作时会转换为零（0）。
*   `undefined`转换为`NaN`。

```java
var myUndefinedVar;			//undefined
var myNullVar = null;		//null

myUndefinedVar + 100;		//NaN

myNullVar + 100;			//100

```

将我的问题放在评论部分。

学习愉快！