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 尚未实现错误解决办法
Nov 27 Javascript
document.createElement()用法及注意事项(ff下不兼容)
Mar 13 Javascript
jQuery 事件的命名空间简单了解
Nov 22 Javascript
深入理解$.each和$(selector).each
May 15 Javascript
javascript特效实现——当前时间和倒计时效果的简单实例
Jul 20 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
Aug 08 Javascript
Bootstrap常用组件学习(整理)
Mar 24 Javascript
postman+json+springmvc测试批量添加实例
Mar 31 Javascript
深入理解Vue nextTick 机制
Apr 28 Javascript
vue-cli3 配置开发与测试环境详解
May 17 Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
Oct 31 Javascript
原生js+canvas实现下雪效果
Aug 02 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防注入安全代码
2008/04/09 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
php实现Session存储到Redis
2015/11/11 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
php将字符串转换为数组实例讲解
2020/05/05 PHP
拖动一个HTML元素
2006/12/22 Javascript
javascript 仿QQ滑动菜单效果代码
2010/09/03 Javascript
js实现对table动态添加、删除和更新的方法
2015/02/10 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
关于JavaScript的变量的数据类型的判断方法
2015/08/14 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
javascript和jQuery实现网页实时聊天的ajax长轮询
2016/07/20 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
Javascript实现的StopWatch功能示例
2017/06/13 Javascript
JS中mouseup事件丢失的原因与解决办法
2017/06/14 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
python下载文件记录黑名单的实现代码
2017/10/24 Python
手把手教你python实现SVM算法
2017/12/27 Python
Python实现的远程文件自动打包并下载功能示例
2019/07/12 Python
详解Python实现进度条的4种方式
2020/01/15 Python
Python Merge函数原理及用法解析
2020/09/16 Python
Python pathlib模块使用方法及实例解析
2020/10/05 Python
一款纯css3实现的tab选项卡的实列教程
2014/12/11 HTML / CSS
关于canvas.toDataURL 在iOS运行失败的问题解决
2020/09/16 HTML / CSS
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
C语言编程练习
2012/04/02 面试题
税务干部群众路线教育实践活动自我剖析材料
2014/09/21 职场文书
2014年幼儿园教研工作总结
2014/12/04 职场文书
销售助理岗位职责
2015/02/11 职场文书
员工试用期转正自我评价
2015/03/10 职场文书
鉴史问廉观后感
2015/06/10 职场文书
2016年安康杯竞赛活动总结
2016/04/05 职场文书
2019广播稿怎么写
2019/04/17 职场文书
Python实现为PDF去除水印的示例代码
2022/04/03 Python