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 图片Silhouette Fadeins渐显效果
Feb 07 Javascript
jquery学习笔记二 实现可编辑的表格
Apr 09 Javascript
JS 控件事件小结
Oct 31 Javascript
jQuery .attr()和.removeAttr()方法操作元素属性示例
Jul 16 Javascript
javascript获取form里的表单元素的示例代码
Feb 14 Javascript
简单谈谈Javascript中类型的判断
Oct 19 Javascript
JavaScript函数的调用以及参数传递
Oct 21 Javascript
jQuery实现仿QQ空间装扮预览图片的鼠标提示效果代码
Oct 30 Javascript
解析Javascript单例模式概念与实例
Dec 05 Javascript
前后端常见的几种鉴权方式(小结)
Aug 04 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
Oct 31 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
Aug 27 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操作memcache缓存方法分享
2015/06/03 PHP
Javascript客户端脚本的设计和应用
2006/08/21 Javascript
一些技巧性实用js代码小结
2009/10/14 Javascript
通过身份证号得到出生日期和性别的js代码
2009/11/23 Javascript
AngularJS中取消对HTML片段转义的方法例子
2015/01/04 Javascript
编写自己的jQuery提示框(Tip)插件
2015/02/05 Javascript
JS实现简单的右下角弹出提示窗口完整实例
2016/06/21 Javascript
相册展示PhotoSwipe.js插件实现
2016/08/25 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法
2016/12/27 Javascript
微信小程序实现图片自适应(支持多图)
2017/01/25 Javascript
Vue中fragment.js使用方法详解
2017/03/09 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
2018/09/08 Javascript
微信小程序之 catalog 切换实现解析
2019/09/12 Javascript
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
Python与shell的3种交互方式介绍
2015/04/11 Python
深入理解Python单元测试unittest的使用示例
2017/11/18 Python
Python实现的NN神经网络算法完整示例
2018/06/19 Python
python代理工具mitmproxy使用指南
2019/07/04 Python
解决python使用list()时总是报错的问题
2020/05/05 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
2020/09/15 Python
python在CMD界面读取excel所有数据的示例
2020/09/28 Python
python中not、and和or的优先级与详细用法介绍
2020/11/03 Python
Champs Sports加拿大:北美最大的以商场为基础的专业运动鞋和服装零售商之一
2018/05/01 全球购物
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
中间件的定义
2016/08/09 面试题
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
三下乡活动方案
2014/01/31 职场文书
三年级班级文化建设方案
2014/05/04 职场文书
处级干部反四风个人对照检查材料思想汇报
2014/09/27 职场文书
村支部书记群众路线对照检查材料思想汇报
2014/10/08 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
入党转正申请自我鉴定
2019/06/25 职场文书
SQL实现LeetCode(176.第二高薪水)
2021/08/04 MySQL
动画电影《擅长捉弄人的高木同学》6月10日上映!
2022/03/20 日漫