JScript中的undefined和"undefined"的区别


Posted in Javascript onMarch 08, 2007

JScript中用于表示未定义的undefined标识符到底是表示什么未定义?它和"undefined"(包括"在内)又有什么区别和联系呢?为什么有的时候可以使用undefined来和变量做比较,而有的时候又不行呢?

    underfined"undefined"的区别大家一眼就能看出来。在一般的认知下,我们认为undefined是JScript提供的一个"关键字",而"undefined"却毫无悬念的就是一个字符串,只是引号内的内容长得和undefined一个样。undefined"undefined"的区别虽然是十分明显的,但它们的联系也是紧密的。

    仔细阅读JScript手册,其实这个underfined是一个"已定义"的Global值,而不是它的字面意义所表达的未定义。我们看下面这个代码示例,很有趣:

JScript中的undefined和&quot;undefined&quot;的区别JScript中的undefined和&quot;undefined&quot;的区别<script language="javascript">JScript中的undefined和&quot;undefined&quot;的区别
JScript中的undefined和&quot;undefined&quot;的区别alert(undefined);
JScript中的undefined和&quot;undefined&quot;的区别alert(variable);
JScript中的undefined和&quot;undefined&quot;的区别
</script>

    执行的结果是:
    JScript中的undefined和&quot;undefined&quot;的区别

    我们稍微修改一下上面的代码,添加一个typeof调用来看看:   

JScript中的undefined和&quot;undefined&quot;的区别JScript中的undefined和&quot;undefined&quot;的区别<script language="javascript">JScript中的undefined和&quot;undefined&quot;的区别
JScript中的undefined和&quot;undefined&quot;的区别alert(typeof undefined);
JScript中的undefined和&quot;undefined&quot;的区别alert(typeof variable);
JScript中的undefined和&quot;undefined&quot;的区别
</script>

    这下结果应该是什么呢?显示"object""undefined"吗?当然不是了,两个alert调用都将显示"undefined"

    所以undefined是脚本引擎定义的一个常量,它在脚本引擎初始化完毕后存在。它的实际作用是用来表示一个已定义的变量的未初始化状态(uninitialized),比如var i;,这时这个i的值就是undefined,而i是实实在在define了的,只是未初始化。这时我们就可以写这样的表达式来对i做判断,比如if ( i == undefined )。如果从未在代码中出现过的变量被使用,这时的未定义的概念就是不undefined所描述的未初始化了,而是说明该变量完全未被登记到脚本引擎的上下文中。使用类似if ( abc == undefined )的语句,将得到类似上图中的第二个错误提示。

    在实际使用中,如果使用typeof来判断变量是否未定义,是可以完全兼容未定义(undefined)未初始化(uninitialized)两种情况的,只是很多时我不喜欢使用 if ( typeof xxx == 'undefined' ) 这样的写法,因为literal的字符串容易拼写错误,对用习惯了的强类型语言的角度来看也显得不专业。

Javascript 相关文章推荐
学习面向对象之面向对象的基本概念:对象和其他基本要素
Nov 30 Javascript
Ext对基本类型的扩展 ext,extjs,format
Dec 25 Javascript
JS代码判断IE6,IE7,IE8,IE9的函数代码
Aug 02 Javascript
常见的原始JS选择器使用方法总结
Apr 09 Javascript
浅析JavaScript事件和方法
Feb 28 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
Jun 01 Javascript
简单谈谈Javascript函数中的arguments
Feb 09 Javascript
vue.js父组件使用外部对象的方法示例
Apr 25 Javascript
AngularJS折叠菜单实现方法示例
May 18 Javascript
深入浅析vue组件间事件传递
Dec 29 Javascript
js隐式转换的知识实例讲解
Sep 28 Javascript
JavaScript修改注册表实例代码
Jan 05 Javascript
JavaScript语句可以不以;结尾的烦恼
Mar 08 #Javascript
JScript中的&quot;this&quot;关键字使用方式补充材料
Mar 08 #Javascript
function, new function, new Function之间的区别
Mar 08 #Javascript
JavaScript中this关键字使用方法详解
Mar 08 #Javascript
区分JS中的undefined,null,&quot;&quot;,0和false
Mar 08 #Javascript
在JavaScript中使用inline函数的问题
Mar 08 #Javascript
JS类中定义原型方法的两种实现的区别
Mar 08 #Javascript
You might like
40年前的这部特摄片恐龙特级克塞号80后的共同回忆
2020/03/08 日漫
乱谈我对耳机、音箱的感受
2021/03/02 无线电
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
php htmlentities和htmlspecialchars 的区别
2008/08/18 PHP
非常全面的php日期时间运算汇总
2015/11/04 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
JavaScript使用cookie
2007/02/02 Javascript
关于恒等于(===)和非恒等于(!==)
2007/08/20 Javascript
javascript最常用与实用的创建类的代码
2010/08/12 Javascript
JS俄罗斯方块,包含完整的设计理念
2010/12/11 Javascript
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
2013/06/26 Javascript
一个JavaScript用逗号分割字符串实例
2014/09/22 Javascript
jquery实现对联广告的方法
2015/02/05 Javascript
AngularJS学习笔记之依赖注入详解
2016/05/16 Javascript
Angular.js 实现数字转换汉字实例代码
2016/07/14 Javascript
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
javascript验证香港身份证的格式或真实性
2017/02/07 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
2017/06/01 Javascript
Typescript的三种运行方式(小结)
2019/09/18 Javascript
九步学会Python装饰器
2015/05/09 Python
python获取当前运行函数名称的方法实例代码
2017/04/06 Python
Python解决N阶台阶走法问题的方法分析
2017/12/28 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
2018/03/08 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
python图形用户接口实例详解
2019/12/16 Python
Python字符串的修改方法实例
2019/12/19 Python
python numpy--数组的组合和分割实例
2020/02/24 Python
学习党代会心得体会
2014/09/05 职场文书
2014年办公室主任工作总结
2014/11/12 职场文书
茶花女读书笔记
2015/06/29 职场文书
女儿满月酒致辞
2015/07/29 职场文书
节水宣传标语口号
2015/12/26 职场文书
员工给公司的建议书
2019/06/24 职场文书
vue实现简单数据双向绑定
2021/04/28 Vue.js
Python实现简单的猜单词
2021/06/15 Python