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 相关文章推荐
AJAX使用了UpdatePanel后无法使用alert弹出脚本
Apr 02 Javascript
jQuery根据纬度经度查看地图处理程序
May 08 Javascript
php与js的区别是什么
Aug 05 Javascript
JS截取字符串常用方法整理及使用示例
Oct 18 Javascript
JavaScript中的ubound函数使用实例
Nov 04 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
Nov 12 Javascript
BootstrapValidator不触发校验的实现代码
Sep 28 Javascript
vue使用Axios做ajax请求详解
Jun 07 Javascript
JS FormData上传文件的设置方法
Jul 05 Javascript
JS实现简单获取最近7天和最近3天日期的方法
Apr 18 Javascript
Vue实战教程之仿肯德基宅急送App
Jul 19 Javascript
基于js判断浏览器是否支持webGL
Apr 18 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
第1次亲密接触PHP5(2)
2006/10/09 PHP
通达OA公共代码 php常用检测函数
2011/12/14 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
2015/12/24 PHP
利用php输出不同的心形图案
2016/04/22 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
2016/07/06 PHP
PHP结合Ueditor并修改图片上传路径
2016/10/16 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
PHP获取真实IP及IP模拟方法解析
2020/11/24 PHP
js 中 document.createEvent的用法
2010/08/29 Javascript
JQuery触发事件例如click
2013/09/11 Javascript
js showModalDialog参数的使用详解
2014/01/07 Javascript
jQuery的animate函数实现图文切换动画效果
2015/05/03 Javascript
JavaScript中的replace()方法使用详解
2015/06/06 Javascript
jQuery+css实现的切换图片功能代码
2016/01/27 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
2016/06/08 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
2017/02/22 Javascript
Vue.js结合Ueditor富文本编辑器的实例代码
2017/07/11 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
layui框架与SSM前后台交互的方法
2019/09/12 Javascript
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
2018/03/22 Python
python爬虫 urllib模块url编码处理详解
2019/08/20 Python
Python利用socket模块开发简单的端口扫描工具的实现
2021/01/27 Python
VICHY薇姿英国官网:全球专业敏感肌护肤领先品牌
2017/07/04 全球购物
德国街头和运动文化高品质商店:BSTN Store
2017/08/26 全球购物
优衣库美国官网:UNIQLO美国
2018/04/14 全球购物
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
.NET方向面试题
2014/11/20 面试题
工商管理应届生求职信
2013/10/07 职场文书
生产厂厂长岗位职责
2013/12/25 职场文书
师生聚会感言
2014/01/26 职场文书
竞聘自述材料
2014/08/25 职场文书
合理化建议书
2015/02/04 职场文书
2015羊年春节慰问信
2015/02/14 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
原生Javascript+HTML5一步步实现拖拽排序
2021/06/12 Javascript