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 相关文章推荐
基本jquery的控制tabs打开的数量的代码
Oct 17 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
Jun 14 Javascript
js实现Select头像选择实时预览代码
Aug 17 Javascript
bootstrap的3级菜单样式,支持母版页保留打开状态实现方法
Nov 10 Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
Jan 19 Javascript
BootStrapValidator初使用教程详解
Feb 10 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
Feb 16 Javascript
JavaScript中正则表达式使数字、中文或指定字符高亮显示
Oct 31 Javascript
JavaScript fetch接口案例解析
Aug 30 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
Aug 31 Javascript
react 应用多入口配置及实践总结
Oct 17 Javascript
vue组件间通信六种方式(总结篇)
May 15 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
PHPMailer安装方法及简单实例
2008/11/25 PHP
如何在HTML 中嵌入 PHP 代码
2015/05/13 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
TP5多入口设置实例讲解
2020/12/15 PHP
JavaScript面向对象之静态与非静态类
2010/02/03 Javascript
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
javascript学习(一)构建自己的JS库
2013/01/02 Javascript
jQuery调用AJAX时Get和post公用的乱码解决方法实例说明
2013/06/04 Javascript
Javascript基础 函数“重载” 详细介绍
2013/10/25 Javascript
JS转换HTML转义符的方法
2016/08/24 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
react 组件传值的三种方法
2019/06/03 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
vue大型项目之分模块运行/打包的实现
2020/09/21 Javascript
vue祖孙组件之间的数据传递案例
2020/12/07 Vue.js
[50:21]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/19 DOTA
python获取豆瓣电影简介代码分享
2014/01/16 Python
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
使用Python实现BT种子和磁力链接的相互转换
2015/11/09 Python
python解析基于xml格式的日志文件
2017/02/25 Python
深入理解Python单元测试unittest的使用示例
2017/11/18 Python
python安装scipy的步骤解析
2019/09/28 Python
Python错误的处理方法
2020/06/23 Python
HTML5时代CSS设置漂亮字体取代图片
2014/09/04 HTML / CSS
常用的HTML5列表标签
2017/06/20 HTML / CSS
《匆匆》教学反思
2014/02/22 职场文书
分公司总经理岗位职责
2014/07/30 职场文书
工商局所长四风自我剖析及整改措施
2014/10/26 职场文书
金榜题名主持词
2015/07/02 职场文书
我的中国梦主题班会
2015/08/14 职场文书
放假通知怎么写
2015/08/18 职场文书
2016计算机专业毕业生自荐信
2016/01/28 职场文书
关于python爬虫应用urllib库作用分析
2021/09/04 Python
Python用tkinter实现自定义记事本的方法详解
2022/03/31 Python
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技