珠峰培训

null和undefined在javascript中有什么实际意义

作者:

2013-08-23 15:42:38

245

本文为珠峰培训原创,这些内容出自珠峰培训第一天的教材。教材请在珠峰培训的学习服务群中下载

 undefinedJavaScript中的一大特点,是JAVASCRIPT独有的数据和数据类型(这种数据类型只有这个一值,就是undefined,它的类型也是undefied),既然它是JAVASCRIPT独有的一种数据类型,那它在JAVASCRIPT编程里必然有它的特色特点,所以这里一定要说清楚。

JAVASCRIPT里,nullundefined都表示不存在的数据,并且undefined也是从null中继承而来,那null是什么?undefined又是什么?它们两个又有什么共性和区别呢,请看下面的描述:

1、  nullundefined都是表示没有的、不存在的值。它们两个在进行逻辑转换时都是false,这两个值进行比较是true

2、   null表示空引用,它是object类型。undefined表示未定义, 它是undefined类型。

3、  如果一个变量的值是null,那么必须主动的给它赋值null

4、  一个变量未定义,或一个变量定义了未赋值,则是undefined。需要注意的是:一个变量如果没有定义,是不能直接在程序里使用的(就不是不能直接读取这个变量,但可以赋值)。比如说:本来没有定义一个叫a的变量
 
但我直接去alert(a);//在浏览器里这样是个语法错误,但是可用typeof去运算
 
但如果a定义了,未赋值,可以读,它的值就是undefined,如果用typeof去运算,那它的类型也是undefined

5、  对说属性来说:如果原来没有这个属性,根本就不存在这个属性,那么它的值就是undefined。对象的属性不需要定义,如果不存在也可以直接去读,不会报错,而会给出一个undefined的值来。

6、  如果这个对象以后要用,但是现在还没有值,一般情况下,会给它一个null值。

7、  在函数(方法)里,如果必须返回值,但是值又计算不出来,那就返回一个null(这是规范,而不是语法规定,JAVASCRIPT里遵循这一规范)。比如网页中没有一个iddiv2的元素,则下面的这句脚本则返回null
 document.getElementById('div2');//
返回null
 
但是,没有返回值的函数,它的返回值都是undefined

nullundefined的实际意义

那这两个值之间在javaScirpt编程的应用中有什么意义呢?这两个值其实主要是标识上的作用,举一个通俗的小例子,你可能的明白了:

郭靖有一个“女朋友”属性(或“老婆”属性也可),这个属性是他固有的,但是黄蓉没出现之前,郭靖.女朋友 这个属性的值是null,黄蓉出现之后这个属性的值才是黄蓉。郭靖的女朋友属性,是天生就有的,就是说这个属性是预留出来的,只是还不到赋值的时候,就是事先定义了,但是没有一个具体的值,就给一个null值,到合适的时候,再给他一个实际的值。    但郭靖是没有“丈夫”这个属性的,因为他本身就没有这个属性,那他的“丈夫”属性就是undefined

JavaScript编程实践中,如果一个变量以后要用到,现在就要定义,那我们就主动给它一个null值,虽然只定义不赋值也没有什么错误。比如以后在动画中要定义一个定时器变量,就是:var timer=null;就表示这个timer是提前定义的,以后要用,当然你也可以不给它这个null,就是直接写一个var timer;这样也没问题,不会有什么语法错误,它的值自动就是undefined,也表示一个不存在的值的。主动把null赋给timer,就是为了强调这个变量是提前预留出来的。

判断JavaScript中一些对象的属性时,也遵循这个原则,如果一个对象的属性根本就没定义过,则它是undefined;如果是null,则表示这是个本来就有的属性,只是没有值。比如说一个网页元素的parentNode这个属性,表示是这个网页元素的父节点,这是个系统规定的(法定的)的法性,一般情况这个属性的值是一个网页元素,但它的值也有为null的时候,比如:document.parentNode,这个就是null,因为它有parentNode这个属性,只不过它是顶级元素,不存父节点而已。但是它不是undefined,如果是undefined表示这个属性根本就没有定义(声明)过。

这个在调试JavaScript时非常有用,如果你调试某一个属性的值是undefined,那说明你可能把这个属性写错了,除非你在直接读取一个你从来没有操作过的自定义属性。

就是说要为以后用的属性主动赋值为null,这样就标识了这个属性是事先声明并预留以后用的。当然,你也可以不做这样的事,这不是什么语法错误,它只是区分此属性是否是事先声明过的一个标识而已。建议大家有这个良好的编程习惯!

以后在珠峰培训学习的过程中,就能很好的体会到这些应用!