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 屏蔽鼠标键盘的几段代码
Jan 02 Javascript
cnblogs csdn 代码运行框实现代码
Nov 02 Javascript
JavaScript实现拖拽网页内元素的方法
Apr 15 Javascript
JS模式之简单的订阅者和发布者模式完整实例
Jun 30 Javascript
jQuery+PHP+MySQL实现无限级联下拉框效果
Feb 19 Javascript
js贪吃蛇游戏实现思路和源码
Apr 14 Javascript
原生JavaScript编写canvas版的连连看游戏
May 29 Javascript
prototype.js简单实现ajax功能示例
Oct 18 Javascript
解决vue-cli创建项目的loader问题
Mar 13 Javascript
解决bootstrap模态框数据缓存的问题方法
Aug 10 Javascript
小程序获取周围IBeacon设备的方法
Oct 31 Javascript
解决vue 给window添加和移除resize事件遇到的坑
Jul 21 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 图片文件上传实现代码
2010/12/29 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
php连接函数implode与分割explode的深入解析
2013/06/26 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码
2011/05/28 Javascript
jQuery事件 delegate()使用方法介绍
2012/10/30 Javascript
javascript采用数组实现tab菜单切换效果
2012/12/12 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
IE8中使用javascript动态加载CSS的解决方法
2014/06/17 Javascript
javascript中eval函数用法分析
2015/04/25 Javascript
jquery实现多屏多图焦点图切换特效的方法
2015/05/04 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
2016/11/17 Javascript
微信小程序 天气预报开发实例代码源码
2017/01/20 Javascript
移动端使用localResizeIMG4压缩图片
2017/04/22 Javascript
详解express与koa中间件模式对比
2017/08/07 Javascript
node.js域名解析实现方法详解
2019/11/05 Javascript
vue页面切换项目实现转场动画的方法
2019/11/12 Javascript
[58:21]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第二场
2018/04/04 DOTA
深入理解Javascript中的this关键字
2015/03/27 Python
Python的Django框架中的Context使用
2015/07/15 Python
用Django实现一个可运行的区块链应用
2018/03/08 Python
python图书管理系统
2020/04/05 Python
Pyqt5自适应布局实例
2019/12/13 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
2020/12/07 Python
基于PyTorch中view的用法说明
2021/03/03 Python
购买美国制造的相框和画框架:Picture Frames
2018/08/14 全球购物
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
如何实现一个自定义类的序列化
2012/05/22 面试题
网络安全方面的面试题
2015/11/04 面试题
喷漆工的岗位职责
2014/03/17 职场文书
安全技术说明书
2014/05/09 职场文书
法定代表人资格证明书
2014/09/11 职场文书
实习证明格式范文
2015/06/16 职场文书
MySQL 逻辑备份与恢复测试的相关总结
2021/05/14 MySQL
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS