返回列表

Javascript:数据类型Null与Undefined

默认分类 2011-01-24 19:02:07

摘自http://hi.baidu.com/thinkingdeeply/blog/item/68e75c278ddbd105908f9d63.html

javascript的变量有一种特殊值,undefined。判断一个变量是不是等于undefined的时候,有两种方法:

if (foo_bar === undefined) { //do something }
if (typeof foo_bar === "undefined") { // do something }

这两种用法是有区别的,其中第二种的形式比较通用,如果怕麻烦,就全部使用第二种就好,没错。
不过据Mr. stauren发现,一些追求极致的代码中,还是会使用第一种方法,比如google的很多代码,因为显然第一种方式比较节约长度,而这对于web应用来说是至关重要的。使用第一种方式,很容易导致js代码出错,因为js碰到未赋值变量被使用的时候,会抛出一个"xxx is not defined"的错误。只有两种情况例外:

1. 这个变量是函数的参数,可能传入的时候这个参数被忽略,但是,其实它在函数初始时已经被声明并赋值undefined,所以不会出错。
function fun01(b)
{
alert(a); //抛出错误"未定义"
alert(b); // 不会出错, 结果为"undefined"
}

2. 这个变量是某对象的成员。很好笑的是一个结论:

alert(a); //抛出错误
alert(window.a); // 结果为"undefined"

补充一点:
如果是该变量是某对象的成员的成员,如果它的成员就为undefined的话,还是会抛出错误。
所以,
alert(window.a); // ok
alert(window.a.a); //error

我们知道,javascript是一种泛类型的语言。泛类型意味着不必显式定义变量的数据类型。事实上,我们无法在 javascript 上明确地定义数据类型。而只能通过var语句显示声明变量:var myvar;
或这样隐式声明变量:myvar=myvarValue(省略var,在声明的同时初始化)。

javascript有三种基本数据类型(字符串、数值、布尔 ),两种引用数据类型(对象、数组)和两种特殊数据类型(Null 、Undefined )。对于基本数据类型和引用数据类型我们很好理解。对于特殊数据类型Null和Undefined,常常会引起我们的一些疑惑。

在 Javascript 中数据类型 Null 只有一个值:null。如果一个变量的值为null ,那么表示该变量 没有保存有效的 数、字符串、Boolean、数组或对象,null与vbscript中Empty的概念不相同(Empty指 未初始化 的变量值)。因此,我们可以通过给一个变量赋 null 值来清除变量的内容。
考查下面的代码:
function test1()
{
var a=null;
alert("typeof(a):"+typeof(a));
alert("a==0:"+(a==0));
}
结果显示:typeof(null)返回的对象类型为Object,而非类型null。这点潜在的混淆是为了向下兼容。同时,在 Javascript 中,null 与 0 不相等。
如果已声明了一个变量但还没有初始化,那么该变量的值就是undefined 。这与vbscript中Empty的概念是相同的。
如下情况使返回 undefined 值:
1、对象属性不存在;
2、声明了变量但从未赋值。
//注意:很多人常犯的一个错误是:当他定义一个变量的时候未初始化,想当然地认为该变量的默认值为数字0字符串""。
我们在javascript中如何判断一个变量是否存在,可以使用如下方法:
function test2()
{
var a;
alert(typeof(a)==undefined); //false
alert(typeof(a)=="undefined"); //true
alert(a==undefined); //true
}

//注意:我们可以通过与undefined做比较测试一个变量是否初始化,但不能通过与 undefined 做比较来测试一个变量是否存在,而只能通过typeof(variable)=="undefined"来判断!
下面的例子将证明我的这一提示的正确性:
function test3()
{
var a;
//alert(b==undefined);//出现错误:'b'未定义
alert(typeof(b)=="undefined"); //true
}
PS:
PHP中NULL的定义:

NULL

特殊的 NULL 值表示一个变量没有值。NULL 类型唯一可能的值就是NULL
注意: NULL 类型是 PHP 4 引进的。
在下列情况下一个变量被认为是 NULL
  • 被赋值为 NULL
  • 尚未被赋值。
  • unset()