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 相关文章推荐
如何在Mozilla Gecko 用Javascript加载XSL
Jan 09 Javascript
用Javascript读取中文COOKIE的解决办法
Feb 15 Javascript
再谈javascript 动态添加样式规则 W3C校检
Dec 25 Javascript
jquery dialog open后,服务器端控件失效的快速解决方法
Dec 19 Javascript
JavaScript动态创建link标签到head里的方法
Dec 22 Javascript
浅析JS运动
Dec 28 Javascript
深入掌握 react的 setState的工作机制
Sep 27 Javascript
微信小程序仿知乎实现评论留言功能
Nov 28 Javascript
详解jQuery-each()方法
Mar 13 jQuery
javascript实现获取中文汉字拼音首字母
May 19 Javascript
在antd中setFieldsValue和defaultVal的用法
Oct 29 Javascript
vue 通过base64实现图片下载功能
Dec 19 Vue.js
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分页函数
2006/07/08 PHP
PHP动态创建Web站点的方法
2011/08/14 PHP
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
javascript函数中的arguments参数
2010/08/01 Javascript
JS JSON对象转为字符串的简单实现方法
2013/11/18 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
JS 打印界面的CSS居中代码适用所有浏览器
2014/03/19 Javascript
node.js中的fs.read方法使用说明
2014/12/17 Javascript
深入探讨javascript函数式编程
2015/10/11 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
详解如何模拟实现node中的Events模块(通俗易懂版)
2019/04/15 Javascript
对Layer弹窗使用及返回数据接收的实例详解
2019/09/26 Javascript
Node.js API详解之 V8模块用法实例分析
2020/06/05 Javascript
微信小程序 button样式设置为图片的方法
2020/06/19 Javascript
weui上传多图片,压缩,base64编码的示例代码
2020/06/22 Javascript
浅谈vue websocket nodeJS 进行实时通信踩到的坑
2020/09/22 NodeJs
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
[43:57]LGD vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python 对象和json互相转换方法
2018/03/22 Python
Django读取Mysql数据并显示在前端的实例
2018/05/27 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
在python里创建一个任务(Task)实例
2020/04/25 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
在html页面中取得session中的值的方法
2020/08/11 HTML / CSS
Abbott Lyon官网:女士手表、珠宝及配件
2020/12/26 全球购物
高三语文教学反思
2014/01/15 职场文书
关于毕业的中学校园广播稿
2014/01/26 职场文书
幼儿教师工作感言
2014/02/14 职场文书
经典演讲稿汇总
2014/05/19 职场文书
施工安全汇报材料
2014/08/17 职场文书
拾金不昧感谢信范文
2015/01/21 职场文书
生死抉择观后感
2015/06/09 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书
Navicat for MySQL的使用教程详解
2021/05/27 MySQL
win10清理dns缓存
2022/04/19 数码科技