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;
}

一些工具库已经部署了这个方法,例如: _.isUndefinedunderscore中的isUndefined方法

总结

标签:js,判断,undefined
0
投稿

猜你喜欢

  • (小技巧)复制消息对话框的内容

    2008-10-21 10:51:00
  • vue2.0+vue-dplayer实现hls播放的示例

    2024-05-29 22:46:56
  • 如何利用python读取图片属性信息

    2023-12-24 00:57:51
  • 基于python图像处理API的使用示例

    2022-12-19 02:14:53
  • PHP如何利用P3P实现跨域

    2023-11-23 20:16:58
  • PHP完全二叉树定义与实现方法示例

    2023-07-04 10:49:10
  • django模板加载静态文件的方法步骤

    2023-04-12 17:13:26
  • Python 如何求矩阵的逆

    2021-07-22 23:28:43
  • echarts学习之如何给饼图中间添加文字

    2024-05-03 11:10:30
  • python批量生成条形码的示例

    2023-02-22 17:49:03
  • Python截图的五个方法实例总结

    2022-07-13 10:40:04
  • Python中optparser库用法实例详解

    2023-08-14 01:32:11
  • 一小时学会TensorFlow2之基本操作1实例代码

    2023-03-01 23:58:10
  • Window下安装JDK1.8+Tomcat9.0.27+Mysql5.7.28的教程图解

    2024-01-26 22:24:12
  • Python解决多进程间访问效率低的方法总结

    2023-11-25 11:57:43
  • 解决python3中的requests解析中文页面出现乱码问题

    2023-11-22 07:04:55
  • Python 识别录音并转为文字的实现

    2021-12-05 02:40:28
  • Python中numpy模块常见用法demo实例小结

    2022-08-03 12:45:12
  • Python matplotlib读取excel数据并用for循环画多个子图subplot操作

    2021-03-28 19:17:31
  • IE8"开发人员工具"使用详解

    2009-03-26 12:51:00
  • asp之家 网络编程 m.aspxhome.com