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 相关文章推荐
一端时间轮换的广告
Jun 26 Javascript
web 页面分页打印的实现
Jun 22 Javascript
JQuery下关于$.Ready()的分析
Dec 13 Javascript
基于jquery的获取mouse坐标插件的实现代码
Apr 01 Javascript
js判断手机和pc端选择不同执行事件的方法
Jan 30 Javascript
JavaScript实现的微信二维码图片生成器的示例
Oct 26 Javascript
Webpack打包慢问题的完美解决方法
Mar 16 Javascript
angular使用post、get向后台传参的问题实例
May 27 Javascript
JS拖拽排序插件Sortable.js用法实例分析
Feb 20 Javascript
JavaScript中AOP的实现与应用
May 06 Javascript
浅谈Express.js解析Post数据类型的正确姿势
May 30 Javascript
layui实现多图片上传并限制上传的图片数量
Sep 26 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对称加密算法示例
2014/05/07 PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
2016/06/22 PHP
javascript Array.sort() 跨浏览器下需要考虑的问题
2009/12/07 Javascript
javascript学习笔记(三) String 字符串类型介绍
2012/06/19 Javascript
Fixie.js 自动填充内容的插件
2012/06/28 Javascript
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
JS实现仿新浪黄色经典滑动门效果代码
2015/09/27 Javascript
九种原生js动画效果
2015/11/11 Javascript
js生成随机数的过程解析
2015/11/24 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
详谈AngularJs 控制器、数据绑定、作用域
2017/07/09 Javascript
vue中七牛插件使用的实例代码
2017/07/28 Javascript
详解VScode编辑器vue环境搭建所遇问题解决方案
2019/04/26 Javascript
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
python实现一个简单的并查集的示例代码
2018/03/19 Python
对Pycharm创建py文件时自定义头部模板的方法详解
2019/02/12 Python
Python的垃圾回收机制详解
2019/08/28 Python
一文轻松掌握python语言命名规范规则
2020/06/18 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
python使用selenium爬虫知乎的方法示例
2020/10/28 Python
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
有趣的睡衣和礼物:LazyOne
2019/11/27 全球购物
大专学生推荐信范文
2013/11/19 职场文书
公司司机岗位职责范本
2014/03/03 职场文书
中文专业求职信
2014/06/20 职场文书
大型公益活动策划方案
2014/08/20 职场文书
公司员工离职证明书
2014/10/04 职场文书
护理专业自我评价
2015/03/11 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
2015年医院保卫科工作总结
2015/07/23 职场文书
Mac环境Nginx配置和访问本地静态资源的实现
2021/03/31 Servers
「魔法少女伊莉雅」美游粘土人开订
2022/03/21 日漫
Python OpenCV实现图像模板匹配详解
2022/04/07 Python
Python实现双向链表基本操作
2022/05/25 Python