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 相关文章推荐
javascript 显示当前系统时间代码
Dec 28 Javascript
jQuery 三击事件实现代码
Sep 11 Javascript
js动态添加删除,后台取数据(示例代码)
Nov 25 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
Jan 06 Javascript
jQuery滚动加载图片实现原理
Dec 14 Javascript
基于jQuery实现select下拉选择可输入附源码下载
Feb 03 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
May 10 Javascript
jQuery获取select选中的option的value值实现方法
Aug 29 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
May 14 Javascript
解决vue v-for src 图片路径问题 404
Nov 12 Javascript
八种Vue组件间通讯方式合集(推荐)
Aug 18 Javascript
浅谈JavaScript 声明提升
Sep 14 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
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
2014/12/19 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
JavaScript Undefined,Null类型和NaN值区别
2008/10/22 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
从零学JS之你需要了解的几本书
2014/05/19 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
2016/09/26 Javascript
Bootstrap在线电子商务网站实战项目5
2016/10/14 Javascript
Angularjs中ng-repeat-start与ng-repeat-end的用法实例介绍
2016/12/31 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
2017/07/18 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
2018/02/23 Javascript
javascript sort()对数组中的元素进行排序详解
2019/10/13 Javascript
微信小程序开发之转发分享功能
2019/10/22 Javascript
如何实现iframe父子传参通信
2020/02/05 Javascript
python通过邮件服务器端口发送邮件的方法
2015/04/30 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
django上传图片并生成缩略图方法示例
2017/12/11 Python
python字符串的方法与操作大全
2018/01/30 Python
Python 确定多项式拟合/回归的阶数实例
2018/12/29 Python
Python使用统计函数绘制简单图形实例代码
2019/05/15 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
详解一种用django_cache实现分布式锁的方式
2019/09/01 Python
python处理document文档保留原样式
2019/09/23 Python
CSS3属性 line-clamp控制文本行数的使用
2020/03/19 HTML / CSS
Juicy Couture Beauty官方网站:香水和化妆品
2019/03/12 全球购物
怀旧香味蜡烛:Homesick
2019/11/02 全球购物
介绍一下write命令
2012/09/24 面试题
尽职尽责村干部自我鉴定
2014/01/23 职场文书
电子商务求职信
2014/06/15 职场文书
西湖英语导游词
2015/02/06 职场文书
同学毕业留言寄语
2015/02/27 职场文书
python批量创建变量并赋值操作
2021/06/03 Python
SqlServer数据库远程连接案例教程
2021/07/15 SQL Server
python数据处理之Pandas类型转换
2022/04/28 Python