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


当前回答

根据Ryan Morr关于这一主题的详尽文章。。。

“通常,如果您需要为变量或属性分配非值,将其传递给函数,或从函数返回,null几乎总是最佳选项。简单地说,JavaScript使用未定义,程序员应该使用null。”

参见探索空和未定义的永恒深渊

其他回答

您可能认为undefined表示系统级、意外或错误,如缺少值,null表示程序级、正常或预期缺少值。

通过JavaScript:最终指南

tl;博士

使用null设置一个已知为Object的变量。

使用undefined设置类型混合的变量。


这是我对5个原语和Object类型的用法,这解释了未定义或空的«用例»之间的区别。

一串

如果您知道一个变量在整个生命周期中只是一个字符串,那么按照惯例,您可以将其初始化为“”:

("") ? true : false; // false
typeof ""; // "string";
("Hello World") ? true : false; // true
typeof "Hello World"; // "string"

数字

如果您知道一个变量在所有生命周期中都只是一个数字,那么按照惯例,您可以将其初始化为0(如果0在您的使用中是一个重要值,则为NaN):

(0) ? true : false; // false
typeof 0; // "number";
(16) ? true : false; // true
typeof 16; // "number"

or

(NaN) ? true : false; // false
typeof NaN; // "number";
(16) ? true : false; // true
typeof 16; // "number"

布尔型

如果您知道一个变量只是一个布尔值,而所有生命周期,按照惯例,您可以将其初始化为false:

(false) ? true : false; // false
typeof false; // "boolean";
(true) ? true : false; // true
typeof true; // "boolean"

对象

如果您知道一个变量在所有生命周期中都只是一个Object,那么按照惯例,您可以将其初始化为null:

(null) ? true : false; // false
typeof null; // "object";
({}) ? true : false; // true
typeof {}; // "object"

注意:关闭null的智能用法是Object的错误版本,因为Object始终为true,因为typeof null返回对象。这意味着typeof myVarObject返回Object和null类型的一致值。

All

如果您知道一个变量有一个混合类型(所有生命周期中的任何类型),按照惯例,您可以将其初始化为undefined。

对于未定义的类型,只有一个值:undefined。

对于null类型,只有一个值:null。

因此,对于这两种情况,标签既是其类型,也是其值。

他们之间的区别。例如:

null是空值undefined是一个缺失的值

Or:

undefined还没有值null有一个值,但不再存在

实际上,null是一个特殊的关键字,而不是标识符,因此不能将其视为要赋值的变量。

然而,undefined是一个标识符。然而,在非严格模式和严格模式下,都可以创建一个名为undefined的局部变量。但这是一个可怕的想法!

function foo() {
    undefined = 2; // bad idea!
}

foo();

function foo() {
    "use strict";
    undefined = 2; // TypeError!
}

foo();

如果变量未初始化,则该变量未定义。undefined不是对象。示例:var MyName;console.log(类型MyName);

检查控制台登录开发工具,它将被打印为未定义。

null是一个对象。如果您希望某个变量为null,则使用null。null变量存在,但值未知。它应该按语法方式分配给变量。null不会自动初始化。

示例:var MyName=null;console.log(类型MyName);检查csole登录开发工具,它将是一个对象。

我想添加一个与空和未定义之间的细微差别有关的知识点。当您尝试从头开始学习Vanilla JavaScript(JS)时,这一点很好:

null是JS中的保留关键字,而undefined是运行时环境的全局对象。

在编写代码时,这种差异是不可识别的,因为null和undefined总是在JavaScript语句的右侧(RHS)使用。但当你在表达式的左手边(LHS)使用它们时,你可以很容易地观察到这种差异。因此JS解释器将以下代码解释为错误:

var null = 'foo'

它给出以下错误:

未捕获语法错误:意外的标记null

同时,以下代码运行成功,尽管我不建议在现实生活中这样做:

var undefined = 'bar'

这是因为undefined是全局对象(如果JavaScript在浏览器中运行,则为窗口对象)上的一个属性