在 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
从前面的例子可以看出, undefined
和null
是两种不同的类型: 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是一个特殊关键字,表示缺少值。
把它想象成一个价值,如:
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