Javascript中判断一个值是否为undefined的方法详解

 更新时间:2016年09月28日 09:57:56   投稿:daisy  
这篇文章给大家详细介绍了在Javascript中如何判断一个值是否为undefined,对大家的日常工作和学习很有帮助,下面来一起看看吧。

前言

相信大家都知道当声明一个变量,并且没有给赋值的情况下,它的初始值是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方法

总结

以上就是这篇文章的全部内容了,希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

相关文章

  • 微信小程序自定义导航的方法

    微信小程序自定义导航的方法

    这篇文章主要为大家详细介绍了微信小程序自定义导航的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 详解数组Array.sort()排序的方法

    详解数组Array.sort()排序的方法

    JavaScript中数组的sort()方法主要用于对数组的元素进行排序。其中,sort()方法有一个可选参数。接下来通过本文给大家介绍数组Array.sort()排序的方法,需要的朋友参考下
    2017-03-03
  • JavaScript 类型转换的详细实现

    JavaScript 类型转换的详细实现

    本文主要介绍了JavaScript 类型转换的详细实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 将CKfinder整合进CKEditor3.0的新方法

    将CKfinder整合进CKEditor3.0的新方法

    最新发布的CKFinder 1.4版 已经提供了对CKEditor3.0的支持
    2010-01-01
  • js实现mp3录音通过websocket实时传送+简易波形图效果

    js实现mp3录音通过websocket实时传送+简易波形图效果

    这篇文章主要介绍了js实现mp3录音通过websocket实时传送+简易波形图效果,本文通过实例代码给大家介绍的非常详细对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • TypeError document.getElementById(...) is null错误原因

    TypeError document.getElementById(...) is null错误原因

    这篇文章主要介绍了TypeError document.getElementById(...) is null错误原因,这是很容易犯的一个低级错误,需要的朋友可以参考下
    2015-05-05
  • 详解layui laydate选择时间的回调方法

    详解layui laydate选择时间的回调方法

    这篇文章主要介绍了layui laydate选择时间的回调方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • JavaScript setInterval()与setTimeout()计时器

    JavaScript setInterval()与setTimeout()计时器

    这篇文章主要介绍了JavaScript setInterval()与setTimeout()计时器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • javascript简易缓动插件(源码打包)

    javascript简易缓动插件(源码打包)

    最近,同事在做一个项目的时候,有个需求,需要一款动画库来支持
    2012-02-02
  • Javascript非构造函数的继承

    Javascript非构造函数的继承

    本文给大家介绍的是不使用构造函数实现"继承",非常的简单,小伙伴们仔细了解下就可以非常熟悉了。
    2015-04-04

最新评论