理解Javascript_02_理解undefined和null [转]

来自普遍的回答:

  其实在 ECMAScript 的原始类型中,是有Undefined 和 Null 类型的。 这两种类型都分别对应了属于自己的唯一专用值,即undefined 和 null。 值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的,通过下列代码可以验证这一结论:

alert(undefined == null); //true

  尽管这两个值相等,但它们的含义不同。undefined 是声明了变量但未对其初始化时赋予该变量的值,null 则用于表示尚未存在的对象。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。所以alert(undefined===null);//false。说实话,我没有看明白,为什么undefined会继承null,即然是继承那为什么undefined!==null,还有未初始化的变量与函数返回的对象不存在之间有什么区别,问题种种,让人很不信服。

  看看内存是怎么说的:

  Udefined代表没有赋值的基本数据类型。Null代表没有赋值的引用数据类型。

  我们来看一段代码:

view sourceprint?

1 var age;
2 var id = 100;
3 var div02 = document.getElementById("div02");//注:div02是不存在的
4 var div01 = document.getElementById("div01");//注:div01存在
5 alert(id);//100
6 alert(age);//undefined
7 alert(div02);//null
8 alert(div01);//object

  再来看一下内存的情况:

  解决第一个问题:为什么undefine继承自null

  在Javascript中,基本数据类型都有一个与其对应的引用数据类型,number Number,string String,boolean Boolean...,他们具有完全相同的行为,并且相互之间会产生自动拆箱与装箱的操作。在内存分析一文中已经讲述了基本数据类型放在栈内存中的意义,由此这们可以得出一个肤浅的结论:基本数据类型是对应引用数据类型的子类,只不过是为了提高效率,将其放在栈内存中而已,对应的Undefined代表无值的基本类型,Null代表无值的引用类型,那势必就可以推出undefined继承null。

  解决第二个问题:为什么undefined==null

   推出来的答案undefined继承自null,内存告诉我们的答案他们都处于栈中

  解决第三个问题:为什么undefined!==null

  内存告诉我们,它们的意义确实是不一样的,老话一句:Udefined代表没有赋值的基本数据类型,Null代表没有赋值的引用数据类型。他们的内存图有很大的区别

  解决额外的问题:null是处理引用的,为什么null处在栈内存中,而不是堆内存中

  答案一样的简单,效率!有必要在栈中分配一块额外的内存去指向堆中的null吗!

  额外的收获:

  当我们要切断与对象的联系,但又并不想给变量赋于其他的值,那么我们可了置null,如var obj = new Object();obj=null;

  一些关于undefined和null的行为

   null 参与数值运算时其值会自动转换为 0 ,因此,下列表达式计算后会得到正确的数值:

  表达式:123 + null    结果值:123

  typeof null 返回object,因为null代表是无值的引用。

  undefined是全局对象(window)的一个特殊属性,其值为Undefined类型的专用值undefined。undefined参与任何数值计算时,其结果一定是NaN。 当声明的变量未初始化时,该变量的默认值是undefined,但是undefined并不同于未定义的值。Typeof运算符无法区分这两种值。因此对于变量是否存在的判断操作是通过if(typeof var == ‘undefined’){ //code here } 来进行判断的,这样既完全兼容未定义(undefined)未初始化(uninitialized)两种情况的

  哈哈,当你站在内存的高度的分析问题的时候,如此抽象的东西有了实际的表现,一切变得简单起来!

 

from:http://kb.cnblogs.com/page/77089/ 

欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 330987132 | Go:217696290 | Python:336880185 | 做人要厚道,转载请注明出处!http://www.cnblogs.com/sunshine-anycall/archive/2010/10/19/1855566.html

时间: 2024-09-18 15:10:20

理解Javascript_02_理解undefined和null [转]的相关文章

理解Javascript_02_理解undefined和null_javascript技巧

来自普遍的回答: 其实在 ECMAScript 的原始类型中,是有Undefined 和 Null 类型的. 这两种类型都分别对应了属于自己的唯一专用值,即undefined 和 null. 值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的,通过下列代码可以验证这一结论: alert(undefined == null); //true 尽管这两个值相等,但它们的含义不同. undefined 是声明了变量但未对其初始化时赋予该变量的值,n

深入理解JS中的变量及作用域、undefined与null

 本篇文章主要是对JS中的变量及作用域.undefined与null进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 Situation One   代码如下: <script> var i; //全局变量 //方法名是camel命名法 //方法里面的变量是局部变量   function sayHello(){ var x=100; alert(x); x++; } sayHello(); //输出100 alert(x); //报错,因为x是局部变量,访问不到 </scr

理解Javascript_07_理解instanceof实现原理_javascript技巧

那么instanceof的这种行为到底是如何实现的呢,现在让我们揭开instanceof背后的迷雾. instanceof原理 照惯例,我们先来看一段代码: 复制代码 代码如下: function Cat(){} Cat.prototype = {} function Dog(){} Dog.prototype ={} var dog1 = new Dog(); alert(dog1 instanceof Dog);//true alert(dog1 instanceof Object);//t

详解JavaScript中undefined与null的区别

 大多数计算机语言,有且仅有一个表示"无"的值,比如,C语言的NULL,Java语言的null,Python语言的none,Ruby语言的nil 有点奇怪的是,JavaScript语言居然有两个表示"无"的值:undefined和null.这是为什么?   一.相似性 在JavaScript中,将一个变量赋值为undefined或null,老实说,几乎没区别.    代码如下: var a = undefined; var a = null;   上面代码中,a变量

Javascript类型系统之undefined和null浅析_javascript技巧

前面的话 一般的程序语言,表示空的只有null,但javascript的设计者Brendan Eich却设计了一个undefined,这无疑增加了程序复杂度,但这样做也是有一定原因的.本文将详细介绍javascript中的undefined和null 历史原因 1995年JavaScript诞生时,最初像Java一样,只设置了null作为表示"无"的值.根据C语言的传统,null被设计成可以自动转为0 但是,JavaScript的设计者Brendan Eich,觉得这样做还不够,有两个

SharePoint 2013 Error - TypeError: Unable to get property &amp;#39;replace&amp;#39; of undefined or null reference

错误信息 TypeError: Unable to get property 'replace' of undefined or null referenceTypeError: Unable to get property 'replace' of undefined or null reference TypeError: Unable to get property 'replace' of undefined or null referenceTypeError: Unable to g

undefined与null的区别

大多数计算机语言,有且仅有一个表示"无"的值,比如,C语言的NULL,Java语言的null,Python语言的None,Ruby语言的nil. 有点奇怪的是,JavaScript语言居然有两个表示"无"的值:undefined和null.这是为什么? 一.相似性 在JavaScript中,将一个变量赋值为undefined或null,老实说,几乎没区别. var a = undefined; var a = null; 上面代码中,a变量分别被赋值为undefin

《AngularJS高级程序设计》——5.8 比较undefined和null值

5.8 比较undefined和null值 JavaScript定义了两个特别的值,当你比较它们时你得小心:undefined和null.当你读取没有赋值的变量或试图取不存在的对象属性时会返回undefined.清单5-38展示了JavaScript中undefined是如何使用的. 清单5-38 在文件jsdemo.html中的特殊值undefined 该清单输出如下: JavaScript还定义了另一个特殊值null,这很少见.Null值与undefined稍有不同.当值没有被定义时返回un

《趣学JavaScript——教孩子学编程》——2.5 undefined和null

2.5 undefined和null 最后,还有不属于任何特殊情况的两个值.它们是undefined和null.用它们来表示"没有",但是,它们之间略有不同. JavaScript使用undefined表示没有值.例如,当创建了一个新的变量,如果没有使用=操作符为它赋值,那么它的值就是undefined: 当想要刻意表达"这是空的"时,通常使用null. 目前,我们不会经常使用undefined或null.如果创建了一个新的变量,并且没有为它赋值,就会看到undef