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 相关文章推荐
一个js实现的所谓的滑动门
May 23 Javascript
jqPlot 图表中文API使用文档及源码和在线示例
Feb 07 Javascript
js 中的switch表达式使用示例
Jun 03 Javascript
学习Bootstrap组件之下拉菜单
Jul 28 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
Sep 24 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
Jul 07 Javascript
React Native实现简单的登录功能(推荐)
Sep 19 Javascript
JS实现动态添加DOM节点和事件的方法示例
Apr 28 Javascript
基于BootStrap实现简洁注册界面
Jul 20 Javascript
vue中各选项及钩子函数执行顺序详解
Aug 25 Javascript
Puppeteer环境搭建的详细步骤
Sep 21 Javascript
详解react阻止无效重渲染的多种方式
Dec 11 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
thinkphp模板输出技巧汇总
2014/11/24 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
2019/03/22 PHP
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
解析ScrollPic在ie8下只滚动一遍,然后变为空白 ie6,ie7,chrome,firefox正常
2013/06/26 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
2013/09/02 Javascript
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
JS日程管理插件FullCalendar中文说明文档
2017/02/06 Javascript
详解如何在angular2中获取节点
2017/11/23 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
微信小程序中使用自定义图标(阿里icon)的方法
2018/08/20 Javascript
NodeJs crypto加密制作token的实现代码
2019/11/15 NodeJs
vue项目中使用eslint+prettier规范与检查代码的方法
2020/01/16 Javascript
VUE中setTimeout和setInterval自动销毁案例
2020/09/07 Javascript
下载给定网页上图片的方法
2014/02/18 Python
python根据京东商品url获取产品价格
2015/08/09 Python
Python中urllib+urllib2+cookielib模块编写爬虫实战
2016/01/20 Python
python实现12306火车票查询器
2017/04/20 Python
高质量Python代码编写的5个优化技巧
2017/11/16 Python
Python设计模式之观察者模式简单示例
2018/01/10 Python
基于python3实现socket文件传输和校验
2018/07/28 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
2019/10/12 Python
python如何调用php文件中的函数详解
2020/12/29 Python
大学生最常用的自我评价
2013/12/07 职场文书
大学生职业生涯设计书
2014/01/02 职场文书
课程改革实施方案
2014/03/16 职场文书
青春励志演讲稿
2014/04/29 职场文书
爱护公共设施的标语
2014/06/24 职场文书
公司向个人借款协议书范本
2014/10/09 职场文书
师德先进个人材料
2014/12/20 职场文书
年会主持人开场白台词
2015/05/29 职场文书
如何写观后感
2015/06/19 职场文书
2016猴年开门红标语口号
2015/12/26 职场文书
MySQL基础(一)
2021/04/05 MySQL
Java Shutdown Hook场景使用及源码分析
2021/06/15 Java/Android
golang中字符串MD5生成方式总结
2021/07/04 Golang