在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变量的原因!
分享到:
相关推荐
这些技术被归入“虚拟解剖学”标题下,以将其与需要尸体和解剖学教科书的常规解剖学研究区分开来。 此外,其他成像程序(X射线,血管造影,CT和MR)也用于虚拟解剖指导。 最近引入的名为“电影渲染”的三维后处理...
大鼠和小鼠解剖图谱[汇编].pdf
目的:本研究旨在描述喉上神经外分支的解剖变化,并估计甲状腺手术中处于危险中的神经的频率。 方法:我们于2016年9月于2018年5月31日在马里巴马科的医学和牙医学口腔解剖学实验室实现了一项前瞻性研究。 所有未接受...
《C语言深度解剖》由作者结合自身多年嵌入式c语言开发经验和平时讲解C语言的心得体会整理而成,其中有很多作者独特的见解或看法。由于并不是从头到尾讲解C语言的基础知识,所以《C语言深度解剖:解开程序员面试笔试...
系统解剖学名词解释和问答题
3Dbody手机APP在神经系统解剖教学中的应用.pdf
C语言深度解剖C语言深度解剖C语言深度解剖C语言深度解剖
系统解剖学习题及答案.pdf系统解剖学习题及答案.pdf系统解剖学习题及答案.pdf系统解剖学习题及答案.pdf系统解剖学习题及答案.pdf系统解剖学习题及答案.pdf
这项研究的目的是在基于尸体的解剖学复习课程中,检查物理治疗博士学位(DPT)的学生和注册护士麻醉师(CRNA)的学生之间的专业间教学机会的结果。 方法:一组DPT学生在这两个程序的指导和提供的指导下,向CRNA学生...
是按照人体的器官系统(如运动系统、消化系统、呼吸系统、泌尿系统、生殖系统、内分泌系统、循环系统、感觉器官和神经系统等),分别加以叙述的人体解剖学。 解剖学、生理学、药理学、病理学合称三理一剖,是现代...
腧穴解剖学填空题.doc
C语言深度解剖C语言深度解剖C语言深度解剖C语言深度解剖C语言深度解剖C语言深度解剖C语言深度解剖C语言深度解剖C语言深度解剖C语言深度解剖C语言深度解剖
3D body手机APP在人体解剖教学中的应用探讨.pdf
实用CT解剖图谱 实用CT解剖图谱 实用CT解剖图谱 实用CT解剖图谱
讨论:在正常表面中,TFBUT确实会在浮动泪膜内发生,而解剖干眼则以泪膜破裂的恒定位置和恒定的扩散方式来识别自己。 与经典的泪膜引起的干眼相反,解剖干眼易于治疗。 这应该引起我们的注意和意图进行识别。 这是...
人体断层解剖学-颈部和喉断层解剖.ppt
基于VRML JavaScript的交互式《人体解剖学》3D虚拟实验室的构建及应用.pdf
人体解剖学习题集(含答案)
《C语言深度解剖:解开程序员面试笔试的秘密》由作者结合自身多年嵌入式c语言开发经验和平时讲解C语言的心得体会整理而成,其中有很多作者独特的见解或看法。由于并不是从头到尾讲解C语言的基础知识,所以《C语言深度...
解剖学期末考试题和参考答案.pdf