Javascript中判断一个值是否为undefined的方法详解


Posted in Javascript onSeptember 28, 2016

前言

相信大家都知道当声明一个变量,并且没有给赋值的情况下,它的初始值是undefined。但是在javascript中,怎么检查一个值是否为undefined呢?

简单来说,在现代浏览器中,你可以安全的比较变量是否为undefined

if (name === undefined) {...}

一些人反对直接使用undefined变量进行比较,因为在旧的浏览器中允许它的值被重新赋值,比如下面这样:

undefined = "test"

在被重新赋值后,使用undefined指令将不能正确的检测一个变量是否被赋值。

不过,这个行为在2009年的ECMAScript 5被修复了。

15.1.1.3 undefined
The value of undefined is undefined (see 8.1). This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.

在现代浏览器中,undefined的值将不能被重写

我们需要支持IE8或者更古老的浏览器怎么办

通常undefined指令是安全的。在应用中并没有什么理由需要修改undefined的值。

Thomas的回答使用具有说服力的推理,论证了这一点。

I don't hear people telling me that I shouldn't use setTimeout because someone can
我不听别人告诉我,我不应该使用setTimeout,因为有的人像这样用:
window.setTimeout = function () {
  alert("Got you now!");
};

下面一行,“它可以被重新赋值”,raw === undefined返回false

如果你仍然很在意,有两个方法可以检查一个值是否为undefined,即使全局window.undefined已经被重写

if (name === void(0)) {...}

在这个例子中0没有任何实际意义,你想要使用 1 or function(){}也无所谓。 void(anything)都会计算得到undefiend

另外一种选择,你可以使用typeof操作符安全地检查是否已经被赋值。你可以检查一个值的类型是否为”undefined”代替与全局的undefined比较.

if (typeof name === "undefined") {...}

注意第二个选择与前一个方案稍微有点差异.尽管name没有被声明,typeof会返回他是undefined。如果你直接使用name与undefinedor void(0)你会得到ReferenceError异常的错误.

但是不要使用VOID(0)指令

在代码中避免使用void(0)或者 typeof x === "undefined" ,你可以使用isUndefined function方法把他们包起来,这样你使用的时候就不用再特意说明了.

function isUndefined(value){
  //获得undefined,保证它没有被重新赋值
  var undefined = void(0);
  return value === undefined;
}

一些工具库已经部署了这个方法,例如: _.isUndefinedunderscore中的isUndefined方法

总结

以上就是这篇文章的全部内容了,希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
splice slice区别
Oct 09 Javascript
JS写的数字拼图小游戏代码[学习参考]
Oct 29 Javascript
Jquery+ajax请求data显示在GridView上(asp.net)
Aug 27 Javascript
js实现仿Discuz文本框弹出层效果
Aug 13 Javascript
AngularJS 中的事件详解
Jul 28 Javascript
D3.js实现雷达图的方法详解
Sep 22 Javascript
深入理解AngularJs-scope的脏检查(一)
Jun 19 Javascript
easyui简介_动力节点Java学院整理
Jul 14 Javascript
node 命令方式启动修改端口的方法
May 12 Javascript
js简单的分页器插件代码实例
Sep 11 Javascript
Vuejs中的watch实例详解(监听者)
Jan 05 Javascript
vue-router 2.0 跳转之router.push()用法说明
Aug 12 Javascript
BootStrap Validator使用注意事项(必看篇)
Sep 28 #Javascript
使用BootStrapValidator完成前端输入验证
Sep 28 #Javascript
request请求获取参数的实现方法(post和get两种方式)
Sep 27 #Javascript
使用JavaScript获取Request中参数的值方法
Sep 27 #Javascript
详解JavaScript权威指南之对象
Sep 27 #Javascript
Web性能优化系列 10个提升JavaScript性能的技巧
Sep 27 #Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
Sep 27 #Javascript
You might like
关于时间计算的结总
2006/12/06 PHP
php 数组的指针操作实现代码
2011/02/08 PHP
php从数组中随机抽取一些元素的代码
2012/11/05 PHP
测试php连接mysql是否成功的代码分享
2014/01/24 PHP
php中实现记住密码下次自动登录的例子
2014/11/06 PHP
php 中奖概率算法实现代码
2017/01/25 PHP
CI框架(CodeIgniter)操作redis的方法详解
2018/01/25 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
2019/10/16 PHP
php实现微信小程序授权登录功能(实现流程)
2019/11/13 PHP
JS Loading功能的简单实现
2013/11/29 Javascript
jquery自动切换tabs选项卡的具体实现
2013/12/24 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
2017/01/11 Javascript
Jquery实现跨域异步上传文件总结
2017/02/03 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
js 获取元素的具体样式信息getcss(实例讲解)
2017/07/05 Javascript
vue中appear的用法
2017/08/17 Javascript
vue 纯js监听滚动条到底部的实例讲解
2018/09/03 Javascript
JavaScript 反射和属性赋值实例解析
2019/10/28 Javascript
关于vue 结合原生js 解决echarts resize问题
2020/07/26 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
2020/08/14 Javascript
python定时检查启动某个exe程序适合检测exe是否挂了
2013/01/21 Python
Python正则表达式匹配HTML页面编码
2015/04/08 Python
python实现批量修改文件名代码
2017/09/10 Python
python实现随机森林random forest的原理及方法
2017/12/21 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
选择Python写网络爬虫的优势和理由
2019/07/07 Python
python3实现微型的web服务器
2019/09/03 Python
使用HTML5 Canvas API绘制弧线的教程
2016/03/22 HTML / CSS
CAT鞋美国官网:CAT Footwear
2017/11/27 全球购物
拥有超过850家商店的美国在线派对商店:Party City
2018/10/21 全球购物
美国领先的机场停车聚合商:Airport Parking Reservations
2020/02/28 全球购物
中软国际Java程序员机试题
2012/08/19 面试题
中专毕业个人的自荐信格式
2013/09/21 职场文书
小班重阳节活动方案
2014/02/08 职场文书
2015年度学校应急管理工作总结
2015/10/22 职场文书
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
2021/04/12 Python