手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >javascript中的undefined 与 null 的区别 补充篇
javascript中的undefined 与 null 的区别 补充篇
摘要:之前查字典教程网发不过类似的文章JavaScriptnull和undefined区别分析JavaScriptUndefined,Null类型...

之前查字典教程网发不过类似的文章

JavaScript null和undefined区别分析

JavaScript Undefined,Null类型和NaN值区别

先说说undefined:

Javascript中的变量是弱类型的(关于这个我想就不用我多解释啦), 所以声明变量的时候只需使用var关键字即可。如果是像C这样的强类型语言, 声明变量的时候如果没有指定初始值,那么会给他一个默认值,比如int变量的默认值是0。但是在Javascript这样的弱类型语言中,没有办法确定到底该给这样的变量一个什么样的默认值,比如我声明一个变量

var v1;

是给他false还是0,或者是'' ?

因为没有类型,所以无法确定。 在Javascript中对于这种生命后没有给定初始值的变量,就给他一个undefined。不过前提是这个变量必须已经声明,如果对于没有声明过的标识符,就会出错。看看下面的代码。

复制代码 代码如下:

var v1;

alert(v1); //undefined

alert(v2); //报错

再来说说null,Javscript有几个基本类型,Number,String,Boolean,Object。对于Object 类型的变量,他有两种情况,一种是他是一个对象的实例,另一种他是一个空引用null,熟悉类似Java这样面向对象语言的朋友应该很容易理解。对于这两种情况,他们的类型都是Object。Javascript中的变量,在给他赋值的时候,才

会确定它的类型,比如下面这样。

复制代码 代码如下:

var v1 = 1;

var v2 = true;

alert(typeof v1); //number

alert(typeof v2); //boolean

v2 = new Date();

alert(typeof v2); //object

v2 = "str";

alert(typeof v2); //string

v2 = null;

alert(typeof v2); //object

可以看到,null在 Javascript中代表一个特殊的Object类型的值,他用来表示空引用的概念,如果要将一个标识符声明称object类型,但是暂时不给他实例,那么就可以将它先初始化为null,以便以后使用。

不一定绝对正确,简单来说,对于所有变量,只要声明后还没有指定初始值 ,那么他就是undefined,如果是Object类型用来表示空引用的概念,那么就是用null来表示。

下面是一些补充:

null :表示无值;

undefined : 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性。==运算符将两者看作相等。如果要区分两者,要使用===或typeof运算符。

使用if (!object){}两者就都包含了

补充:2006.12.6

复制代码 代码如下:

var obj = "aaa";

var nullobj;

if (obj == null || obj == undefined || (!obj) ){

alert("obj is null");

}

if (nullobj == null){

alert("obj is null");

}

if (nullobj == undefined){

alert("obj is undefined ");

}

if ( !nullobj ){

alert("! obj ");

}

关于undefined和"undefined的补充(2007/1/30):

JScript中用于表示未定义的undefined标识符到底是表示什么未定义?它和"undefined"(包括"在内)又有什么区别和联系呢?为什么有的时候可以使用undefined来和变量做比较,而有的时候又不行呢?

underfined和"undefined"的区别大家一眼就能看出来。在一般的认知下,我们认为undefined是JScript提供的一个"关键字",而"undefined"却毫无悬念的就是一个字符串,只是引号内的内容长得和undefined一个样。undefined和"undefined"的区别虽然是十分明显的,但它们的联系也是紧密的。

仔细阅读JScript手册,其实这个underfined是一个"已定义"的Global值,而不是它的字面意义所表达的未定义。我们看下面这个代码示例,很有趣:

复制代码 代码如下:

<script language="Javascript">

alert(undefined);

alert(variable);

</script>

执行的结果是:

我们稍微修改一下上面的代码,添加一个typeof调用来看看:

复制代码 代码如下:

<script language="Javascript">

alert(typeof undefined);

alert(typeof variable);

</script>

这下结果应该是什么呢?显示"object"和"undefined"吗?当然不是了,两个alert调用都将显示"undefined"。

所以undefined是脚本引擎定义的一个常量,它在脚本引擎初始化完毕后存在。它的实际作用是用来表示一个已定义的变量的为初始化状态(uninitialized),比如var i;,这时这个i的值就是undefined,而i是实实在在define了的,只是未初始化。这时我们就可以写这样的表达式来对i做判断,比如if ( i == undefined )。如果从未在代码中出现过的变量被使用,这时的未定义的概念就是不undefined所描述的未初始化了,而是说明该变量完全未被登记到脚本引擎的上下文中。使用类似if ( abc == undefined )的语句,将得到类似上图中的第二个错误提示。

在实际使用中,如果使用typeof来判断变量是否未定义,是可以完全兼容未定义(undefined)和未初始化(uninitialized)两种情况的,只是很多时我不喜欢使用 if ( typeof xxx == 'undefined' ) 这样的写法,因为literal的字符串容易拼写错误,对用习惯了的强类型语言的角度来看也显得不专业。

undefined:未定义 如声明一个变量而不赋值给它,或使用一个不存在的对象属性

null:空值 这个真的不好理解

好象是为了兼容以前的浏览器(IE4.0才有undefined吧)而把null和undefined认为是相同

复制代码 代码如下:

<script language="javascript">

var msg="使用未声明的变量undef_x: ";

if(typeof(undef_x)=="undefined")msg+="undefined ";

else msg+="defined ";

msg+="n";

msg+="声明变量后未赋值undef_null_x: ";

var undef_null_x;

if(typeof(undef_null_x)=="undefined")msg+="undefined ";else msg+="defined ";

if(undef_null_x==null)msg+="null ";else msg+="not null";

msg+="n";

msg+="变量赋值null null_x: ";

var null_x=null;

if(typeof(null_x)=="undefined")msg+="undefined ";else msg+="defined ";

if(null_x==null)msg+="null ";else msg+="not null";

msg+="n";

msg+="变量赋""值 x: ";

var x="";

if(typeof(x)=="undefined")msg+="undefined ";else msg+="defined ";

if(x==null)msg+="null ";else msg+="not null";

alert(msg);

</script>

【javascript中的undefined 与 null 的区别 补充篇】相关文章:

详解Javascript中的Object对象

Javascript中setTimeOut和setInterval的定时器用法

详谈javascript中的cookie

JavaScript中的this机制

JavaScript中的unshift()方法的使用

javascript字符串与数组转换汇总

JavaScript中的this,call,apply使用及区别详解

浅谈javascript中for in 和 for each in的区别

浅析JavaScript中的事件机制

Javascript中的Prototype到底是什么

精品推荐
分类导航