JavaScript中的null和undefined有什么区别?
我想知道JavaScript中的null
和undefined
之间的区别。
在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
是一个类型本身(undefined),而null
是一个对象。
null === undefined // false
null == undefined // true
null === null // true
和
null = 'value' // ReferenceError
undefined = 'value' // 'value'
我从这里选择了这个
未定义的值是当变量未被赋值时使用的原始值。
空值是表示空,空或不存在的引用的原始值。
当你通过var声明一个变量并且不给它一个值时,它将具有未定义的值。 就其本身而言,如果您尝试使用WScript.Echo()或alert()此值,则不会看到任何内容。 但是,如果您向其添加空白字符串,则会突然显示:
var s;
WScript.Echo(s);
WScript.Echo("" + s);
您可以声明一个变量,将其设置为null,并且行为是相同的,只不过您会看到“null”打印出来而不是“未定义”。 这确实是一个很小的差异。
您甚至可以将未定义的变量与空值进行比较,反之亦然,并且条件成立:
undefined == null
null == undefined
然而,它们被认为是两种不同的类型。 虽然undefined是一个全部自身的类型,但null被认为是一个特殊的对象值。 你可以通过使用typeof()来看到这个,它返回一个表示变量一般类型的字符串:
var a;
WScript.Echo(typeof(a));
var b = null;
WScript.Echo(typeof(b));
运行上面的脚本将产生以下输出:
undefined
object
不管他们是不同的类型,如果你尝试访问任何一个类型的成员,他们仍然会采取相同的行动,例如,也就是说他们会抛出异常。 有了WSH,你会看到可怕的“'varname'为空或不是对象”,这就是如果你幸运的话(但这是另一篇文章的主题)。
你可以明确地设置一个变量为未定义的,但我强烈反对它。 我建议只将变量设置为null,并为您忘记设置的值留下未定义的值。 同时,我真的鼓励你总是设定每个变量。 JavaScript的作用域链与C风格语言的作用域链不同,即使是经验丰富的程序员也容易混淆,并且将变量设置为null是防止基于它的错误的最佳方法。
另一个你会看到未定义的实例是使用delete操作符。 我们这些来自C世界的人可能会错误地将此解释为摧毁一个对象,但事实并非如此。 这个操作的作用是从一个数组或一个对象的成员中删除一个下标。 对于数组,它不影响长度,但现在将下标视为未定义。
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,这通常是我们所做的。 虽然我们可以将变量设置为未定义,但我们更喜欢null,因为它不是我们所做过的。 当你调试时,这意味着设置为null的任何东西都是你自己做的,而不是JavaScript。 除此之外,这两个特殊值几乎相同。
null是指示缺少值的特殊关键字。
把它看作一种价值,就像:
未定义的属性表明一个变量还没有被赋予一个包含null的值。 喜欢
var foo;
定义空变量是null
数据类型的undefined
它们都代表一个没有值的变量的值
AND 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
所以每个人都有自己的使用方式
未定义使用它来比较变量数据类型
null用它来清空变量的值
var a = 'javascript';
a = null ; // will change the type of variable "a" from string to object
链接地址: http://www.djcxy.com/p/2145.html
上一篇: What is the difference between null and undefined in JavaScript?