`

解剖JavaScript中的null和undefined

 
阅读更多
[size=small]    在JavaScript开发中,被人问到:null与undefined到底有啥区别?
    一时间不好回答,特别是undefined,因为这涉及到undefined的实现原理。于是,细想之后,写下本文,请各位大侠拍砖。
    总所周知:null == undefined
    但是:null !== undefined
    那么这两者到底有啥区别呢?
    请听俺娓娓道来...

null
    这是一个对象,但是为空。因为是对象,所以 typeof null  返回 'object' 。
    null 是 JavaScript 保留关键字。
    null 参与数值运算时其值会自动转换为 0 ,因此,下列表达式计算后会得到正确的数值:
    表达式:123 + null    结果值:123
    表达式:123 * null    结果值:0

undefined
  undefined是全局对象(window)的一个特殊属性,其值是未定义的。但 typeof undefined 返回 'undefined' 。
      虽然undefined是有特殊含义的,但它确实是一个属性,而且是全局对象(window)的属性。请看下面的代码:
    alert('undefined' in window);   //输出:true

     var anObj = {};
     alert('undefined' in anObj);    //输出:false

从中可以看出,undefined是window对象的一个属性,但却不是anObj对象的一个属性。

  注意:尽管undefined是有特殊含义的属性,但却不是JavaScript的保留关键字。
  undefined参与任何数值计算时,其结果一定是NaN。
  随便说一下,NaN是全局对象(window)的另一个特殊属性,Infinity也是。这些特殊属性都不是JavaScript的保留关键字!

提高undefined性能
  当我们在程序中使用undefined值时,实际上使用的是window对象的undefined属性。
  同样,当我们定义一个变量但未赋予其初始值,例如:
    var aValue;
  这时,JavaScript在所谓的预编译时会将其初始值设置为对window.undefined属性的引用,
  于是,当我们将一个变量或值与undefined比较时,实际上是与window对象的undefined属性比较。这个比较过程中,JavaScript会搜索window对象名叫‘undefined'的属性,然后再比较两个操作数的引用指针是否相同。
  由于window对象的属性值是非常多的,在每一次与undefined的比较中,搜索window对象的undefined属性都会花费时间。在需要频繁与undefined进行比较的函数中,这可能会是一个性能问题点。因此,在这种情况下,我们可以自行定义一个局部的undefined变量,来加快对undefined的比较速度。例如:

    function anyFunc()
    {
        var undefined;          //自定义局部undefined变量
       
        if(x == undefined)      //作用域上的引用比较
       
       
        while(y != undefined)   //作用域上的引用比较
       
    };

  其中,定义undefined局部变量时,其初始值会是对window.undefined属性值的引用。新定义的局部undefined变量存在与该函数的作用域上。在随后的比较操作中,JavaScript代码的书写方式没有任何的改变,但比较速度却很快。因为作用域上的变量数量会远远少于window对象的属性,搜索变量的速度会极大提高。
  这就是许多前端JS框架为什么常常要自己定义一个局部undefined变量的原因!

原著:李战(leadzen).杭州-阿里软件 2009-2-18
原址:http://blog.csdn.net/leadzen/archive/2009/02/17/3899392.aspx
[/size]
分享到:
评论

相关推荐

    JavaScript深度剖析.zip

    1. **基础语法**:JavaScript的基础包括变量、数据类型(如字符串、数字、布尔、null、undefined、对象和数组)、操作符(算术、比较、逻辑、赋值)、流程控制(条件语句、循环)以及函数的使用。 2. **函数与作用...

    3Dbody手机APP在神经系统解剖教学中的应用.pdf

    综上所述,3Dbody手机APP作为一种新型的教学工具,在神经系统解剖教学中的应用不仅能够提高学生的学习效率和成绩,同时也能增强教学内容的直观性和教学方法的灵活性,对于提升医学教育质量具有重要意义。随着数字...

    大鼠和小鼠解剖图谱[汇编].pdf

    接下来,在图Ⅷ-2中,我们可以看到大鼠和小鼠的整体骨骼左前面观,展示了骨骼系统的左前面观,包括肋骨、胸椎、颈椎、肩胛骨、肱骨、桡骨、尺骨、掌骨、指骨、腰椎、髂骨、尾骨、股骨、髌骨、腓骨、胫骨、跖骨和趾骨...

    基于VRML JavaScript的交互式《人体解剖学》3D虚拟实验室的构建及应用.pdf

    "基于VRML JavaScript的交互式《人体解 剖学》3D虚拟实验室的构建及应用" ...本文介绍了基于VRML JavaScript的交互式《人体解剖学》3D虚拟实验室的构建及应用,旨在提高学生的学习兴趣和学习效率,推动教学改革。

    three. js的人体解剖图.zip

    Three.js 是一个基于 WebGL 的 JavaScript 库,它为Web开发人员提供了一个在浏览器中创建3D图形的强大工具。这个“three.js的人体解剖图”压缩包,很显然是一个利用Three.js库来展示人体结构的3D可视化项目。下面...

    系统解剖学名词解释和问答题.pdf

    系统解剖学是医学领域中的一门基础学科,主要研究人体的结构组成和各器官之间的关系。在给定的文件内容中,涉及了众多解剖学术语和解剖结构的特点,以下是根据文件内容提炼的知识点: 标准解剖学姿势:解剖学研究中...

    C语言深度解剖 第一版和第二版(打包)

    《C语言深度解剖》是两本专注于C语言学习与进阶的重要著作,第一版和第二版的结合为读者提供了全面而深入的C语言知识体系。这个压缩包包含的资源,"C语言总结",是对C语言基础知识的精炼概述,涵盖了C语言的关键概念...

    人体解剖学习题集(含答案).pdf

    人体解剖学是医学领域中不可或缺的一门基础学科,它涉及对人类身体结构的深入研究,包括骨骼、关节、肌肉、内脏器官等各系统的组成和布局。为了帮助医学生和相关专业人员有效掌握这些知识,学习题集起到了至关重要的...

    医疗纠纷死亡案例中尸体解剖工作规范化探索.pdf

    随着社会对医疗质量和医疗安全要求的不断提高,医疗纠纷死亡案例中尸体解剖工作的规范化显得尤为迫切。本文将从尸体解剖的重要性和规范化问题着手,探讨如何通过一系列措施提高尸体解剖工作的标准化程度,以期达到...

    最全人体解剖图

    人体解剖学主要分为两个方面:大体解剖学和显微解剖学。大体解剖学关注的是肉眼可见的结构,如骨骼、肌肉、器官等,而显微解剖学则通过显微镜观察细胞和组织的细微结构。此外,根据研究目的的不同,还可以细分为系统...

    3D人体解剖图

    在医疗和健康领域,3D人体解剖图是一种先进的学习和研究工具,它利用三维技术将人体结构以直观、立体的方式展现出来。这种技术对于医学生、医生、物理治疗师以及其他健康专业人士来说,是非常有价值的资源,能帮助...

    人体解剖三维动画

    在描述中提到的“比较简单,透视三维效果”,意味着这个解剖动画可能采用了基础的3D建模技术,能够提供基本的视角变换和透视效果。这种简化版的三维模型通常包含关键的人体器官和系统,如骨骼、肌肉、神经系统、血液...

    最全,最经典的人体解剖图.

    根据提供的文件信息,这里将基于“最全,最经典的人体解剖图”这一主题进行展开,探讨人体解剖学中的关键知识点。 ### 一、人体解剖学概述 人体解剖学是研究人体结构的一门学科,它帮助我们了解身体各部位的位置、...

    人体解剖浏览器MediView

    在CG(Computer Graphics,计算机图形学)领域,MediView是一款极具价值的工具,专为学习和理解人体解剖学设计。这款软件利用先进的三维技术和360度观看功能,提供了一个直观、立体的观察平台,使用户能够从各个角度...

    论文研究 - 喉上神经外支的解剖解剖到巴马科医学院的解剖实验室(马里)

    目的:本研究旨在描述喉上神经外分支的解剖变化,并估计甲状腺手术中处于危险中的神经的频率。 方法:我们于2016年9月于2018年5月31日在马里巴马科的医学和牙医学口腔解剖学实验室实现了一项前瞻性研究。 所有未接受...

    《C语言深度解剖》PDF

    《C语言深度解剖》是一本专为C语言学习者和开发者设计的深入解析书籍,旨在帮助读者全面理解和掌握C语言的核心概念和技术。C语言,作为一种基础且强大的编程语言,被广泛应用于系统开发、嵌入式系统、软件工程等多个...

    山东大学《局部解剖学》期末复习资料总结(有点老).pdf

    局部解剖学是医学专业的一门重要学科,主要研究人体局部区域的解剖结构和相互关系。根据提供的内容,我们可以了解到山东大学《局部解剖学》期末复习资料中的一些详细知识点。 一、头部结构 在头部局部解剖学中,...

    中山大学大学生《临床解剖学》期末复习资料.pdf

    这对于医学生来说是必不可少的知识储备,尤其是对于将来从事临床工作的医生而言,正确且充分地理解解剖学知识,对于疾病的诊断、治疗乃至手术过程中的精确诊断和操作都至关重要。中山大学所提供的《临床解剖学》期末...

Global site tag (gtag.js) - Google Analytics