关于null和undefined的不同的讨论
时间:2010-05-23
来源:互联网
像所有将要参加面试的同学一样,最近看得特别多的是基础知识。今天对null和undefined产生了疑惑,很大的疑惑。
google了很久,在很多帖子中都以null和undefined详解为题,可是最终我并没有看到什么深入的解释,甚至连最为重要的我们最关注的:在使用上两者有什么区别?使用价值的区别?都没有很好的解释出来。所以我希望在这里留下我一上午所总结的,更为重要的是,我希望了解它们的人能在下边给我更多的启示。

Undefined类型和Null类型是ECMAScript的五种原始类型中的两个,也有人称它们两个为javascript中的两种特殊类型。它们分别都只有一个值,就是undefined和null。在图灵出版社出版的《Javascript高级程序设计》一书上提到,当声明的变量未初始化时,该变量的默认值为undefined(这也很符合这个单词的含义),而对于null,该书写到“undefined实际上是从null派生来的,因此ECMAScript把它们定义为相等,即alert(null==undefined)//true,尽管两个值相等,但是它们的含义不同,undefined是声明了变量但未对其初始化时赋予该变量的值,null则用于表示未存在的对象(type of null =='object'),如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是null”。
针对上述所讲,我构造了一上午“如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是null”这样的函数,最后还是没有构造出来。希望强人能帮我构造出来。这可能是null和undefined最大的不同点。
在验证方面null和undefined是有区别和相同的。
比如
代码:
var c;alert(undefined==null)//true
alert(c==undefined);//true
alert(c==null);//true
代码:
<script type="text/javascript">alert(typeof a =='undefined')
//在未声明变量时就是用变量会直接造成deny
//alert(a==undefined)
</script>
关于null的使用,我认为最大的作用是清空一个变量(因为在验证空值方面有undefined),这可能是在使用上最大的区别。
而且undefined侧重于原始值,而null侧重于对象。
希望大家多批评指正,您的批评是我最大的进步
作者: wifeyang 发布时间: 2010-05-23
你试一下 document.getElementById(‘theElm’) ,只要HTML里没有ID为'theElm'的元素,就会返回null。
二、关于undefined和null的区别:
首先,undefined === null //返回false
另外,null*1=0 而 undefined*1=NaN
[ 本帖最后由 alsove 于 2010-5-23 13:36 编辑 ]
作者: alsove 发布时间: 2010-05-23
所以才会有null*1=0 而 undefined*1=NaN。
一个根本不存在的东西当然没法转换成正常数字,而一个空的东西被看做是0也是理所当然
作者: alsove 发布时间: 2010-05-23

您说的很对
作者: wifeyang 发布时间: 2010-05-23
上面的情况,根据ECMAscript规范,取他们的布尔值进行比较,
alert(Boolean(undefined)); //false
alert(Boolean(null)); //false
所以 alert(undefined == null) // true 并不说明 undefined 等价于 null
看两个变量是否完全等价,应该用#2的方法,使用恒等于(===)判断
另外#2的举例(null*1=0 而 undefined*1=NaN)
本质上也应该是这两个值转换成number对象后值不同:
alert(Number(undefined)); //NaN
alert(Number(null)); //0
作者: colinivy 发布时间: 2010-05-23
1. null是对象,所以我们获取一个不存在的DOM对象时,会返回null
2. undefined本身是一种数据类型,但同时它也是window对象的一个特殊属性,所以当我们获取一个不存在,或者未定义的属性值时会返回undefined
alert(undefined in window); // true
alert(document.getElementById('test').xx); // undefined
作者: colinivy 发布时间: 2010-05-23
作者: wifeyang 发布时间: 2010-05-23

[ 本帖最后由 alsove 于 2010-5-23 18:43 编辑 ]
作者: alsove 发布时间: 2010-05-23
首先,ECMAScript中有六大数据类型:Undefined, Null, Boolean, String, Number, and Object.
引用:
The ECMAScript language types are Undefined, Null, Boolean, String, Number, and Object.至于typeof null,只是一个特例,因为typeof没有返回Null类型的结果。
引用:
8.2 The Null TypeThe Null type has exactly one value, called null.
提示:您可以先修改部分代码再运行
可以看到,实际type为Null的null值,返回的结果是"object"。可见这只不过是一个处理的特例罢了。
[ 本帖最后由 afc163 于 2010-5-23 21:23 编辑 ]
作者: afc163 发布时间: 2010-05-23
我在5楼的说法还是有问题的

作者: colinivy 发布时间: 2010-05-24
作者: yffdsj 发布时间: 2010-05-24
作者: yffdsj 发布时间: 2010-05-24

作者: vipsir 发布时间: 2010-05-24
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28