Javascript中判断一个值是否为undefined的方法详解
作者:daisy 时间:2024-04-19 09:54:13
前言
相信大家都知道当声明一个变量,并且没有给赋值的情况下,它的初始值是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;
}
一些工具库已经部署了这个方法,例如: _.isUndefined
,underscore
中的isUndefined
方法
总结
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
(小技巧)复制消息对话框的内容
vue2.0+vue-dplayer实现hls播放的示例
![](https://img.aspxhome.com/file/2023/2/123002_0s.png)
如何利用python读取图片属性信息
![](https://img.aspxhome.com/file/2023/3/64353_0s.png)
基于python图像处理API的使用示例
PHP如何利用P3P实现跨域
PHP完全二叉树定义与实现方法示例
![](https://img.aspxhome.com/file/2023/8/55378_0s.jpg)
django模板加载静态文件的方法步骤
Python 如何求矩阵的逆
![](https://img.aspxhome.com/file/2023/7/72807_0s.jpg)
echarts学习之如何给饼图中间添加文字
![](https://img.aspxhome.com/file/2023/3/132703_0s.jpg)
python批量生成条形码的示例
Python截图的五个方法实例总结
![](https://img.aspxhome.com/file/2023/4/115214_0s.jpg)
Python中optparser库用法实例详解
一小时学会TensorFlow2之基本操作1实例代码
![](https://img.aspxhome.com/file/2023/5/94175_0s.jpg)
Window下安装JDK1.8+Tomcat9.0.27+Mysql5.7.28的教程图解
![](https://img.aspxhome.com/file/2023/7/131857_0s.gif)
Python解决多进程间访问效率低的方法总结
解决python3中的requests解析中文页面出现乱码问题
Python 识别录音并转为文字的实现
![](https://img.aspxhome.com/file/2023/4/133374_0s.jpg)
Python中numpy模块常见用法demo实例小结
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
![](https://img.aspxhome.com/file/2023/2/109432_0s.jpg)
IE8"开发人员工具"使用详解
![](https://img.aspxhome.com/file/UploadPic/up/2009032613125389.gif)