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对象的函数
Dec 22 Javascript
关于document.cookie的使用javascript
Apr 11 Javascript
关于extjs4如何获取grid修改后的数据的问题
Aug 07 Javascript
jQuery的remove()方法使用详解
Aug 11 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
Dec 14 Javascript
微信小程序实战之上拉(分页加载)效果(2)
Apr 17 Javascript
浅谈从React渲染流程分析Diff算法
Sep 08 Javascript
详解vue 项目白屏解决方案
Oct 31 Javascript
vue使用Font Awesome的方法步骤
Feb 26 Javascript
小程序实现分类页
Jul 12 Javascript
Vue实现数据表格合并列rowspan效果
Nov 30 Javascript
Vue实现多标签选择器
Nov 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去除换行符的方法小结(PHP_EOL变量的使用)
2013/02/16 PHP
php empty()与isset()区别的详细介绍
2013/06/17 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
2014/07/22 PHP
php动态绑定变量的用法
2015/06/16 PHP
PHP Try-catch 语句使用技巧
2016/02/28 PHP
IE innerHTML,outerHTML所引起的问题
2009/06/04 Javascript
使用原生JS实现弹出层特效
2014/12/22 Javascript
jquery+html5制作超酷的圆盘时钟表
2015/04/14 Javascript
BootStrap中的table实现数据填充与分页应用小结
2016/05/26 Javascript
移动端js图片查看器
2016/11/17 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
Angular2中select用法之设置默认值与事件详解
2017/05/07 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
js 两个日期比较相差多少天的实例
2017/10/19 Javascript
浅谈如何使用webpack构建多页面应用
2018/05/30 Javascript
解决vue-cli脚手架打包后vendor文件过大的问题
2018/09/27 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
element 中 el-menu 组件的无限极循环思路代码详解
2020/04/26 Javascript
python list使用示例 list中找连续的数字
2014/01/27 Python
详解Django之admin组件的使用和源码剖析
2018/05/04 Python
pyqt5 从本地选择图片 并显示在label上的实例
2019/06/13 Python
浅谈Python小波分析库Pywavelets的一点使用心得
2019/07/09 Python
Python统计分析模块statistics用法示例
2019/09/06 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
Python可以用来做什么
2020/11/23 Python
Python爬虫之Selenium实现键盘事件
2020/12/04 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
Bealls Florida百货商店:生活服饰、家居装饰和鞋子
2018/02/23 全球购物
青年志愿者事迹材料
2014/02/07 职场文书
秋游活动策划方案
2014/02/16 职场文书
汉语言文学专业自荐信
2014/06/11 职场文书
单位计划生育责任书
2015/05/09 职场文书
2015年三好一满意工作总结
2015/07/24 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书
MATLAB 全景图切割及盒图显示的实现步骤
2021/05/14 Python
解决MySQL Varchar 类型尾部空格的问题
2022/04/06 MySQL