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 相关文章推荐
PJBlog插件 防刷新的在线播放器
Oct 25 Javascript
JavaScript中window、doucment、body的解释
Aug 14 Javascript
JS实现鼠标经过好友列表中的好友头像时显示资料卡的效果
Jul 02 Javascript
跟我学习javascript的undefined与null
Nov 17 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
Mar 05 Javascript
jQuery获取单击节点对象的方法
Jun 02 Javascript
深入浅出讲解ES6的解构
Aug 03 Javascript
浅谈es6 javascript的map数据结构
Dec 14 Javascript
JavaScript 点击触发复制功能实例详解
Nov 02 Javascript
js canvas实现画图、滤镜效果
Nov 27 Javascript
解决axios post 后端无法接收数据的问题
Oct 29 Javascript
js最全的数组的降维5种办法(小结)
Apr 28 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
PHP 读取文件内容代码(txt,js等)
2009/12/06 PHP
php入门学习知识点五 关于php数组的几个基本操作
2011/07/14 PHP
ThinkPHP上使用多说评论插件的方法
2014/10/31 PHP
PHP 9 大缓存技术总结
2015/09/17 PHP
php+mysql实现的二级联动菜单效果详解
2016/05/10 PHP
JavaScript简单实现网页回到顶部功能
2013/11/12 Javascript
JavaScript实现Java中StringBuffer的方法
2015/02/09 Javascript
JavaScript计算两个日期时间段内日期的方法
2015/03/16 Javascript
JavaScript解八皇后问题的方法总结
2016/06/12 Javascript
AngularJS动态加载模块和依赖的方法分析
2016/11/08 Javascript
JS批量替换内容中关键词为超链接
2017/02/20 Javascript
JS表单提交验证、input(type=number) 去三角 刷新验证码
2017/06/21 Javascript
JS验证码实现代码
2017/09/14 Javascript
JavaScript实现短信倒计时60s
2017/10/09 Javascript
深入Node TCP模块的理解
2019/03/13 Javascript
js实现一个简易计算器
2020/03/30 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
2020/09/02 Javascript
详解Vue的mixin策略
2020/11/19 Vue.js
python实现简单淘宝秒杀功能
2018/05/03 Python
python 获取一个值在某个区间的指定倍数的值方法
2018/11/12 Python
利用Python绘制Jazz网络图的例子
2019/11/21 Python
基于Pycharm加载多个项目过程图解
2020/01/19 Python
Python3.x+pyqtgraph实现数据可视化教程
2020/03/14 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
经销商会议欢迎词
2014/01/11 职场文书
中学生校园广播稿
2014/01/16 职场文书
公司董事长岗位职责
2014/06/08 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
副乡长群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
商业用房租赁协议书
2014/10/13 职场文书
小学师德师风整改措施
2014/10/27 职场文书
虎兄虎弟观后感
2015/06/12 职场文书
家庭贫困证明
2015/06/16 职场文书
《巫师》是美食游戏?CDPR10月将推出《巫师》官方食谱
2022/04/03 其他游戏