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 相关文章推荐
IE JS编程需注意的内存释放问题
Jun 23 Javascript
jquery 关于event.target使用的几点说明介绍
Apr 26 Javascript
javascript获取鼠标点击元素对象(示例代码)
Dec 20 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
Feb 13 Javascript
用循环或if语句从json中取数据示例
Aug 18 Javascript
JQuery选择器、过滤器大整理
May 26 Javascript
适用于javascript开发者的Processing.js入门教程
Feb 24 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
Nov 16 Javascript
DOM事件探秘篇
Feb 15 Javascript
浅析js中mvvm模式实现的原理
Oct 06 Javascript
详细分析vue响应式原理
Jun 22 Javascript
JavaScript对象访问器Getter及Setter原理解析
Dec 08 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
php中几种常见安全设置详解
2010/04/06 PHP
详解PHP导入导出CSV文件
2014/11/03 PHP
PHP封装CURL扩展类实例
2015/07/28 PHP
YUI 读码日记之 YAHOO.lang.is*
2008/03/22 Javascript
一段利用WSH获取登录时间的jscript代码
2008/05/11 Javascript
js实现页面跳转重定向的几种方式
2014/05/29 Javascript
用javascript将数据导入Excel示例代码
2014/09/10 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
2015/11/25 Javascript
浅谈js的html元素的父节点,子节点
2016/08/06 Javascript
自制微信公众号一键排版工具
2016/09/22 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
ReactNative踩坑之配置调试端口的解决方法
2017/07/28 Javascript
Webpack path与publicPath的区别详解
2018/05/03 Javascript
vue里的data要用return返回的原因浅析
2019/05/28 Javascript
基于vue-draggable 实现三级拖动排序效果
2020/01/10 Javascript
js+canvas实现图片格式webp/png/jpeg在线转换
2020/08/22 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
element 动态合并表格的步骤
2020/12/31 Javascript
Python unittest模块用法实例分析
2018/05/25 Python
详解python中的装饰器
2018/07/10 Python
在python中pandas的series合并方法
2018/11/12 Python
Python中new方法的详解
2019/01/15 Python
python3.6环境安装+pip环境配置教程图文详解
2019/06/20 Python
python 字典 setdefault()和get()方法比较详解
2019/08/07 Python
django实现支付宝支付实例讲解
2019/10/17 Python
智能室内花园:Click & Grow
2021/01/29 全球购物
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
weblogic面试题
2016/03/07 面试题
培训演讲稿范文
2014/01/12 职场文书
校本教研活动总结
2014/07/01 职场文书
县级领导干部开展党的群众路线教育实践活动工作汇报
2014/10/25 职场文书
2015年个人自我剖析材料
2014/12/29 职场文书
2015年“7.11”世界人口日宣传活动方案
2015/05/06 职场文书
保护环境建议书作文500字
2015/09/14 职场文书
Python机器学习应用之基于线性判别模型的分类篇详解
2022/01/18 Python
【海涛解说】史上最给力比赛,挑战DOTA极限
2022/04/01 DOTA