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知识点收藏
Feb 22 Javascript
浅谈JS闭包中的循环绑定处理程序
Nov 09 Javascript
基于javascript实现简单的抽奖系统
Apr 15 Javascript
巧用数组制作图片切换js代码
Nov 29 Javascript
vue项目中做编辑功能传递数据时遇到问题的解决方法
Dec 19 Javascript
简单实现jQuery弹窗效果
Oct 30 jQuery
微信小程序实现简单input正则表达式验证功能示例
Nov 30 Javascript
浅谈react受控组件与非受控组件(小结)
Feb 09 Javascript
基于vue实现可搜索下拉框定制组件
Mar 26 Javascript
tracking.js页面人脸识别插件使用方法
Apr 16 Javascript
Vue使用预渲染代替SSR的方法
Jul 02 Javascript
JS将指定的某个字符全部转换为其他字符实例代码
Oct 13 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
第1次亲密接触PHP5(2)
2006/10/09 PHP
PHP 页面跳转到另一个页面的多种方法方法总结
2009/07/07 PHP
php中使用websocket详解
2016/09/23 PHP
PHP读取、解析eml文件及生成网页的方法示例
2017/09/04 PHP
PHP中常见的密码处理方式和建议总结
2018/10/14 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
用Jquery.load载入页面实现局部刷新
2014/01/22 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
AngularJs $parse、$eval和$observe、$watch详解
2016/09/21 Javascript
IntersectionObserver API 详解篇
2016/12/11 Javascript
JS实现字符串转驼峰格式的方法
2016/12/16 Javascript
jQuery实现动态添加、删除按钮及input输入框的方法
2017/04/27 jQuery
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
详解微信小程序与内嵌网页交互实现支付功能
2018/10/22 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
Vue 简单实现前端权限控制的示例
2020/12/25 Vue.js
Python基于scapy实现修改IP发送请求的方法示例
2017/07/08 Python
Python升级导致yum、pip报错的解决方法
2017/09/06 Python
Python3学习笔记之列表方法示例详解
2017/10/06 Python
Python 实现文件读写、坐标寻址、查找替换功能
2019/09/11 Python
基于python调用psutil模块过程解析
2019/12/20 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
2020/02/03 Python
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
人民教师的自我评价分享
2014/02/21 职场文书
旅游文化节策划方案
2014/06/06 职场文书
525心理活动总结
2014/07/04 职场文书
物联网工程专业推荐信
2014/09/08 职场文书
2014党员民主评议个人总结
2014/09/10 职场文书
陕西导游词
2015/02/04 职场文书
事业单位年度考核个人总结
2015/02/12 职场文书
银行文明优质服务培训心得体会
2016/01/09 职场文书
残联2016年全国助残日活动总结
2016/04/01 职场文书
2019各种承诺书范文
2019/06/24 职场文书
php 防护xss,PHP的防御XSS注入的终极解决方案
2021/04/01 PHP
JavaScript实现班级抽签小程序
2021/05/19 Javascript