协慌网

登录 贡献 社区

JavaScript 中的 null 和 undefined 有什么区别?

我想知道 JavaScript 中nullundefined之间的区别。

答案

在 JavaScript 中, undefined表示已声明变量但尚未赋值,例如:

var TestVar;
alert(TestVar); //shows undefined
alert(typeof TestVar); //shows undefined

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

var TestVar = null;
alert(TestVar); //shows null
alert(typeof TestVar); //shows object

从前面的例子可以看出, undefinednull是两种不同的类型: undefined是一个类型本身(未定义),而null是一个对象。

null === undefined // false
null == undefined // true
null === null // true

null = 'value' // ReferenceError
undefined = 'value' // 'value'

我从这里选了这个

未定义的值是在未为变量赋值时使用的原始值。

null 值是一个原始值,表示 null,empty 或不存在的引用。

通过 var 声明变量并且不给它赋值时,它将具有未定义的值。如果您尝试使用 WScript.Echo()或 alert()此值,您将看不到任何内容。但是,如果你向它附加一个空白字符串,那么突然它会出现:

var s;
WScript.Echo(s);
WScript.Echo("" + s);

您可以声明一个变量,将其设置为 null,并且行为是相同的,除了您将看到 “null” 打印出来与 “undefined”。这确实是一个小差异。

您甚至可以将未定义的变量与 null 进行比较,反之亦然,条件为真:

undefined == null
null == undefined

然而,它们被认为是两种不同的类型。虽然 undefined 是一个 all 类型,但 null 被认为是一个特殊的对象值。你可以通过使用 typeof()来看到这一点,它返回一个表示变量的一般类型的字符串:

var a;
WScript.Echo(typeof(a));
var b = null;
WScript.Echo(typeof(b));

运行上面的脚本将导致以下输出:

undefined
object

无论它们是不同类型,如果您尝试访问其中任何一个的成员,它们仍将保持相同的行为,例如,也就是说它们会抛出异常。使用 WSH,您将看到可怕的 “'varname' 为 null 或不是对象”,如果您很幸运(但这是另一篇文章的主题)。

您可以明确地将变量设置为未定义,但我强烈反对它。我建议只将变量设置为 null,并为您忘记设置的内容保留 undefined 值。同时,我真的鼓励你总是设置每个变量。 JavaScript 的范围链与 C 风格的语言不同,即使是资深程序员也容易混淆,将变量设置为 null 是防止基于它的错误的最佳方法。

您将看到未定义弹出窗口的另一个实例是使用 delete 运算符时。我们这些来自 C 世界的人可能错误地将其解释为摧毁一个物体,但事实并非如此。此操作的作用是从 Array 中删除下标或从 Object 中删除成员。对于数组,它不会影响长度,而是下标现在被认为是未定义的。

var a = [ 'a', 'b', 'c' ];
delete a[1];
for (var i = 0; i < a.length; i++)
WScript.Echo((i+".) "+a[i]);

上述脚本的结果是:

0.) a
1.) undefined
2.) c

在读取从未存在的下标或成员时,您还将返回未定义的内容。

null 和 undefined 之间的区别在于:JavaScript 永远不会将任何内容设置为 null,这通常就是我们所做的。虽然我们可以将变量设置为 undefined,但我们更喜欢 null,因为它不是我们曾经做过的事情。当你进行调试时,这意味着任何设置为 null 的都是你自己做的而不是 JavaScript。除此之外,这两个特殊值几乎相同。

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

把它想象成一个价值,如:

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

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

var foo;

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


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

null并不代表没有价值的字符串 - 空与字符串


喜欢

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

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