JS基础之undefined与null的区别分析


Posted in Javascript onAugust 08, 2011

于是,细想之后,写下本文,请各位大侠拍砖。
总所周知:
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变量的原因!
希望通过本文的介绍,能给你带来帮助。
Javascript 相关文章推荐
JS批量修改PS中图层名称的方法
Jan 26 Javascript
从零学JS之你需要了解的几本书
May 19 Javascript
javascript控制在光标位置插入文字适合表情的插入
Jun 09 Javascript
深入解析JavaScript中函数的Currying柯里化
Mar 19 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
Aug 04 Javascript
Bootstrap 3 按钮标签实例代码
Feb 21 Javascript
AngularJS实现页面定时刷新
Mar 14 Javascript
React + webpack 环境配置的方法步骤
Sep 07 Javascript
详解如何使用babel进行es6文件的编译
May 29 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
Oct 19 Javascript
详细讲解如何创建, 发布自己的 Vue UI 组件库
May 29 Javascript
JS typeof fn === 'function' && fn()详解
Aug 22 Javascript
jQuery的12招常用技巧分享
Aug 08 #Javascript
利用javascript的面向对象的特性实现限制试用期
Aug 04 #Javascript
jquery动态加载图片数据练习代码
Aug 04 #Javascript
jquery里的正则表达式说明
Aug 03 #Javascript
基于jQuery的图片剪切插件
Aug 03 #Javascript
jQuery + Flex 通过拖拽方式动态改变图片的代码
Aug 03 #Javascript
JavaScript 一道字符串分解的题目
Aug 03 #Javascript
You might like
咖啡的种类和口感
2021/03/03 新手入门
福利彩票幸运号码自动生成器
2006/10/09 PHP
PHP面向对象分析设计的61条军规小结
2010/07/17 PHP
css把超出的部分显示为省略号的方法兼容火狐
2008/07/23 Javascript
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
jquery checkbox实现单选小例
2013/11/27 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
2015/12/03 Javascript
各式各样的导航条效果css3结合jquery代码实现
2016/09/17 Javascript
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
2018/07/31 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
2018/09/30 Javascript
vue组件中的样式属性scoped实例详解
2018/10/30 Javascript
解决echarts的多个折现数据出现坐标和值对不上的问题
2018/12/28 Javascript
python中的多线程实例教程
2014/08/27 Python
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
python读取文件名称生成list的方法
2018/04/27 Python
django解决跨域请求的问题
2018/11/11 Python
python中的句柄操作的方法示例
2019/06/20 Python
python词云库wordCloud使用方法详解(解决中文乱码)
2020/02/17 Python
Pytorch环境搭建与基本语法
2020/06/03 Python
使用Python Tkinter实现剪刀石头布小游戏功能
2020/10/23 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
HTML5+CSS3实现机器猫
2016/10/17 HTML / CSS
泰国演唱会订票网站:StubHub泰国
2018/02/26 全球购物
GoPro摄像机美国官网:美国运动相机厂商
2018/07/03 全球购物
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
Oracle的内存结构(Memory structures)
2015/06/10 面试题
宝宝满月酒主持词和仪式流程
2014/03/27 职场文书
2014年人事部工作总结
2014/12/03 职场文书
2015年行政执法工作总结
2015/05/23 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书
行政后勤人员工作计划应该怎么写?
2019/08/16 职场文书
Python+Appium实现自动抢微信红包
2021/05/21 Python
Mysql开启外网访问
2022/05/15 MySQL