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 相关文章推荐
基于jQuery实现的Ajax 验证用户名是否存在的实现代码
Apr 06 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
Jan 17 Javascript
jquery选择器之基本过滤选择器详解
Jan 27 Javascript
详谈JavaScript内存泄漏
Nov 14 Javascript
jQuery基于muipicker实现仿ios时间选择
Feb 22 Javascript
用js读写cookie的简单方法(推荐)
Aug 08 Javascript
详解webpack的proxyTable无效的解决方案
Jun 15 Javascript
微信小程序实现语音识别转文字功能及遇到的坑
Aug 02 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
Sep 27 Javascript
React实现轮播效果
Aug 25 Javascript
vue+elementUI实现表格列的显示与隐藏
Apr 13 Vue.js
vue 自定义组件添加原生事件
Apr 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
全国FM电台频率大全 - 20 广西省
2020/03/11 无线电
php分页函数
2006/07/08 PHP
利用文件属性结合Session实现在线人数统计
2006/10/09 PHP
PHP正则替换函数preg_replace和preg_replace_callback使用总结
2014/09/22 PHP
最准确的php截取字符串长度函数
2015/10/29 PHP
Javascript 定时器调用传递参数的方法
2009/11/12 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
2014/02/07 Javascript
浅析js中substring和substr的方法
2015/11/09 Javascript
vue环境搭建简单教程
2017/11/07 Javascript
使用DataTable插件实现异步加载数据
2017/11/19 Javascript
小程序扫描普通链接二维码跳转小程序指定界面方法
2019/05/07 Javascript
微信小程序Echarts图表组件使用方法详解
2019/06/25 Javascript
[01:01:42]Secret vs Optic Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
python pygame实现方向键控制小球
2019/05/17 Python
python命令 -u参数用法解析
2019/10/24 Python
Python urlopen()和urlretrieve()用法解析
2020/01/07 Python
解决Python logging模块无法正常输出日志的问题
2020/02/21 Python
详解pyinstaller生成exe的闪退问题解决方案
2020/06/19 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
深入浅出CSS3 background-clip,background-origin和border-image教程
2011/01/27 HTML / CSS
H5最强接口之canvas实现动态图形功能
2019/05/31 HTML / CSS
雅高酒店中国:Accorhotels.com China
2018/03/26 全球购物
日本最大的旅游网站:Rakuten Travel(乐天旅游)
2018/08/02 全球购物
Java程序员面试90题
2013/10/19 面试题
数控个人求职信范文
2014/02/03 职场文书
教师廉洁自律承诺书
2014/05/26 职场文书
银行授权委托书格式
2014/10/10 职场文书
教师自查自纠工作情况报告
2014/10/29 职场文书
中秋节晚会开场白
2015/05/29 职场文书
感恩教师节主题班会
2015/08/12 职场文书
小学思品教学反思
2016/02/20 职场文书
2016年百日安全生产活动总结
2016/04/06 职场文书
企业内部管理控制:采购授权审批制度范本
2020/01/19 职场文书
测量JavaScript函数的性能各种方式对比
2021/04/27 Javascript
Java Kafka 消费积压监控的示例代码
2021/07/01 Java/Android
无线电通信名词解释
2022/02/18 无线电