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实现的UBB编码函数
Mar 09 Javascript
javascript之可拖动的iframe效果代码
Aug 01 Javascript
图片轮换效果实现代码(点击按钮停止执行)
Apr 12 Javascript
JavaScript中的ubound函数使用实例
Nov 04 Javascript
js表头排序实现方法
Jan 16 Javascript
AngularJS 服务详细讲解及示例代码
Aug 17 Javascript
JS闭包与延迟求值用法示例
Dec 22 Javascript
vue移动端实现下拉刷新
Apr 22 Javascript
微信小程序实现联动选择器
Feb 15 Javascript
使用vue-router在Vue页面之间传递数据的方法
Jul 15 Javascript
layui实现三级导航菜单
Jul 26 Javascript
vue 使用lodash实现对象数组深拷贝操作
Sep 10 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
session 的生命周期是多长
2006/10/09 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
javascript 鼠标拖动图标技术
2010/02/07 Javascript
js中查找最近的共有祖先元素的实现代码
2010/12/30 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
bootstrap的3级菜单样式,支持母版页保留打开状态实现方法
2016/11/10 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
javascript设计模式之单体模式学习笔记
2017/02/15 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
利用jQuery异步上传文件的插件用法详解
2017/07/19 jQuery
微信小程序使用progress组件实现显示进度功能【附源码下载】
2017/12/12 Javascript
vue v-model动态生成详解
2018/06/30 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
2018/09/04 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
基于JS实现数字动态变化显示效果附源码
2019/07/18 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
2019/07/19 Javascript
JavaScript Array对象使用方法解析
2019/09/24 Javascript
JavaScript实现移动端带transition动画的轮播效果
2020/03/24 Javascript
Vue自动构建发布脚本的方法示例
2020/07/24 Javascript
使用pyqt 实现重复打开多个相同界面
2019/12/13 Python
解决django框架model中外键不落实到数据库问题
2020/05/20 Python
HTML5中的postMessage API基本使用教程
2016/05/20 HTML / CSS
爱尔兰电子产品购物网站:Komplett.ie
2018/04/04 全球购物
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
工作中的自我评价如何写好
2013/10/28 职场文书
大学生怎样进行自我评价
2013/12/07 职场文书
爱情检讨书大全
2014/01/21 职场文书
学校卫生检查制度
2014/02/03 职场文书
开业庆典主持词
2014/03/21 职场文书
期中考试反思800字
2014/05/01 职场文书
班主任高考寄语
2015/02/26 职场文书
暂停营业通知
2015/04/25 职场文书
Python编程编写完善的命令行工具
2021/09/15 Python
解决flex布局中子项目尺寸不受flex-shrink限制
2022/05/11 HTML / CSS