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 相关文章推荐
JavaScript的parseInt 取整使用
May 09 Javascript
用js小类库获取浏览器的高度和宽度信息
Jan 15 Javascript
顶部缓冲下拉菜单导航特效的JS代码
Aug 27 Javascript
防止按钮在短时间内被多次点击的方法
Mar 10 Javascript
JS实现可关闭的对联广告效果代码
Sep 14 Javascript
基于jQuery实现点击列表加载更多效果
May 31 Javascript
javascript表单控件实例讲解
Sep 13 Javascript
9种改善AngularJS性能的方法
Nov 28 Javascript
从parcel.js打包出错到选择nvm的全部过程
Jan 23 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
May 22 Javascript
JS highcharts实现动态曲线代码示例
Oct 16 Javascript
element 动态合并表格的步骤
Dec 31 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
PHPEXCEL 使用小记
2013/01/06 PHP
解析php中的escape函数
2013/06/29 PHP
php获取从百度搜索进入网站的关键词的详细代码
2014/01/08 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
2014/10/30 PHP
php实现获取文件mime类型的方法
2015/02/11 PHP
js版本A*寻路算法
2006/12/22 Javascript
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
JavaScript与Div对层定位和移动获得坐标的实现代码
2010/09/08 Javascript
javascript 进阶篇1 正则表达式,cookie管理,userData
2012/03/14 Javascript
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
toggle()隐藏问题的解决方法
2014/02/17 Javascript
node.js中的http.get方法使用说明
2014/12/14 Javascript
JS实现复选框的全选和批量删除功能
2017/04/05 Javascript
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
详解node.js 下载图片的 2 种方式
2018/03/02 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
layer 刷新某个页面的实现方法
2019/09/05 Javascript
JS数据类型判断的几种常用方法
2020/07/07 Javascript
vue-路由精讲 二级路由和三级路由的作用
2020/08/06 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
vue3中轻松实现switch功能组件的全过程
2021/01/07 Vue.js
python数据结构链表之单向链表(实例讲解)
2017/07/25 Python
使用python创建Excel工作簿及工作表过程图解
2020/05/27 Python
AC Lens:购买隐形眼镜
2017/02/26 全球购物
伦敦眼门票在线预订:London Eye
2018/05/31 全球购物
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
英国排名第一的LED灯泡网站:LED Bulbs
2019/09/03 全球购物
半年思想汇报
2013/12/30 职场文书
教师个人成长总结
2015/02/11 职场文书
2015年骨干教师工作总结
2015/05/26 职场文书
大国崛起日本观后感
2015/06/02 职场文书
继续教育心得体会(共6篇)
2016/01/19 职场文书
2016年党员读书月活动总结
2016/04/06 职场文书
变长双向rnn的正确使用姿势教学
2021/05/31 Python
叶县这家生产军用电台的兵工厂,人称“四机部”,走出一上将
2022/02/18 无线电