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 相关文章推荐
javascript 关闭IE6、IE7
Jun 01 Javascript
Javascript跨域请求的4种解决方式
Mar 17 Javascript
使用JQUERY进行后台页面布局控制DIV实现左右式
Jan 07 Javascript
jQuery中noConflict()用法实例分析
Feb 08 Javascript
全面解析Bootstrap排版使用方法(文字样式)
Nov 30 Javascript
BootStrap 智能表单实战系列(十)自动完成组件的支持
Jun 13 Javascript
基于Bootstrap框架实现图片切换
Mar 10 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
Dec 24 jQuery
JS实现数组简单去重及数组根据对象中的元素去重操作示例
Jan 05 Javascript
JS实现百度网盘任意文件强制下载功能
Aug 31 Javascript
js module大战
Apr 19 Javascript
Vue组件简易模拟实现购物车
Dec 21 Vue.js
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
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
2017/12/13 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
javascript css float属性的特殊写法
2008/11/13 Javascript
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
2013/08/07 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
不提示直接关闭网页窗口的JS示例代码
2013/12/17 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
nodejs实现HTTPS发起POST请求
2015/04/23 NodeJs
js仿百度登录页实现拖动窗口效果
2016/03/11 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
微信小程序 tabs选项卡效果的实现
2017/01/05 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
横向对比分析Python解析XML的四种方式
2016/03/30 Python
python接口自动化测试之接口数据依赖的实现方法
2019/04/26 Python
修改Pandas的行或列的名字(重命名)
2019/12/18 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
完美解决keras 读取多个hdf5文件进行训练的问题
2020/07/01 Python
python连接mysql数据库并读取数据的实现
2020/09/25 Python
css3隔行变换色实现示例
2014/02/19 HTML / CSS
RetroStage德国:复古服装
2019/02/03 全球购物
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
如何在存储过程中使用Loop
2016/01/05 面试题
《和田的维吾尔》教学反思
2014/04/14 职场文书
亲子阅读的活动方案
2014/08/15 职场文书
2014年最新大专生职业生涯规划书范文
2014/09/13 职场文书
个人职业及收入证明
2014/10/13 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
个人求职信格式范文
2015/03/20 职场文书
怎样写观后感
2015/06/19 职场文书
2016秋季运动会前导词
2015/11/25 职场文书
民警忠诚教育心得体会
2016/01/23 职场文书
Pytorch实现图像识别之数字识别(附详细注释)
2021/05/11 Python