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 捕获窗口关闭事件
Jul 26 Javascript
JS远程获取网页源代码实例
Sep 05 Javascript
JavaScript 垃圾回收机制分析
Oct 10 Javascript
用javascript对一个json数组深度赋值示例
Jul 27 Javascript
JavaScript及jquey实现多个数组的合并操作
Sep 06 Javascript
JS实现为表格动态添加标题的方法
Mar 31 Javascript
js删除局部变量的实现方法
Jun 25 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
Aug 06 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
Aug 18 Javascript
jQuery为某个div加入行样式
Jun 09 jQuery
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
Oct 12 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
Jul 24 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
在php中判断一个请求是ajax请求还是普通请求的方法
2011/06/28 PHP
关于PHP内存溢出问题的解决方法
2013/06/25 PHP
基于PHP中的常用函数回顾
2013/07/11 PHP
php+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
php实现查看邮件是否已被阅读的方法
2013/12/03 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
2019/09/26 PHP
javascript第一课
2007/02/27 Javascript
js控制表单不能输入空格的小例子
2013/11/20 Javascript
JavaScript中window.showModalDialog()用法详解
2014/12/18 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
jquery实现ajax加载超时提示的方法
2016/07/23 Javascript
javascript实现圣旨卷轴展开效果(代码分享)
2017/03/23 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
完美解决mui框架off-canvas侧滑超出部分隐藏无法滚动的问题
2018/01/25 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
JS数组去重的6种方法完整实例
2018/12/08 Javascript
浅谈javascript中的prototype和__proto__的理解
2019/04/07 Javascript
JavaScript实现文件下载并重命名代码实例
2019/12/12 Javascript
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
Python队列的定义与使用方法示例
2017/06/24 Python
python实现京东秒杀功能
2018/07/30 Python
python中正则表达式 re.findall 用法
2018/10/23 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
2020/06/18 Python
运动会表扬稿大全
2014/01/16 职场文书
写给老师的表扬信
2014/01/21 职场文书
教师党员岗位承诺书
2014/05/29 职场文书
中国梦演讲稿5分钟
2014/08/19 职场文书
检察院对照“四风”认真查找问题落实整改措施
2014/09/26 职场文书
80后婚前协议书范本
2014/10/24 职场文书
简单的辞职信模板
2015/05/12 职场文书
欠款起诉书范文
2015/05/19 职场文书
民事诉讼答辩状范文
2015/05/21 职场文书
青年教师听课心得体会
2016/01/15 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
vue项目中的支付功能实现(微信支付和支付宝支付)
2022/02/18 Vue.js