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 相关文章推荐
jquery.Jwin.js 基于jquery的弹出层插件代码
May 23 Javascript
javascript小数四舍五入多种方法实现
Dec 23 Javascript
JavaScript获取当前网页标题(title)的方法
Apr 03 Javascript
JavaScript中的原型继承基础学习教程
May 06 Javascript
JS获取子窗口中返回的数据实现方法
May 28 Javascript
AngularJs  Using $location详解及示例代码
Sep 02 Javascript
详解jQuery插件开发方式
Nov 22 Javascript
vue添加axios,并且指定baseurl的方法
Sep 19 Javascript
详解Vue.js自定义tipOnce指令用法实例
Dec 19 Javascript
详解如何模拟实现node中的Events模块(通俗易懂版)
Apr 15 Javascript
vue 全局封装loading加载教程(全局监听)
Nov 05 Javascript
JS创建自定义对象的六种方法总结
Dec 15 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 zend 相对路径问题
2009/01/12 PHP
php htmlspecialchars加强版
2010/02/16 PHP
php分页思路以及在ZF中的使用
2012/05/30 PHP
php笔记之:初探PHPcms模块开发介绍
2013/04/26 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
js 方法实现返回多个数据的代码
2009/04/30 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
nodejs获取本机内网和外网ip地址的实现代码
2014/06/01 NodeJs
javascript面向对象之访问对象属性的两种方式分析
2015/01/13 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
关于Ajax的原理以及代码封装详解
2017/09/08 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
2018/01/04 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
JS装饰器函数用法总结
2018/04/21 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
vue element动态渲染、移除表单并添加验证的实现
2019/01/16 Javascript
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
2017/02/13 Python
详解用python生成随机数的几种方法
2019/08/04 Python
python 画条形图(柱状图)实例
2020/04/24 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
2020/12/22 Python
Sephora丝芙兰马来西亚官方网站:国际化妆品购物
2018/03/15 全球购物
印尼购物网站:iLOTTE
2019/10/16 全球购物
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
高级人员简历的自我评价分享
2013/11/03 职场文书
党员一句话承诺大全
2014/03/28 职场文书
竞选学习委员演讲稿
2014/09/01 职场文书
2014年林业工作总结
2014/12/05 职场文书
违纪开除通知书
2015/04/25 职场文书
小学教师读书笔记
2015/07/01 职场文书
母婴行业实体、电商模式全面解析
2019/08/01 职场文书
科学家测试在太空中培育人造肉,用于未来太空旅行
2022/04/29 数码科技
vue中data里面的数据相互使用方式
2022/06/05 Vue.js