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
方法
总结


猜你喜欢
- 最近,我有机会在一个真实的 Golang 场景中使用泛型,同时寻找与 Stream filter(Predicate<? super
- 本文实例讲述了Python编程之多态用法。分享给大家供大家参考。具体分析如下:什么是多态?顾名思义,多态就是多种表现形态的意思。它是一种机制
- 使用运算符“+”PHP的数组运算符“+”可以用来联合两个(或
- update()方法添加键 - 值对到字典dict2。此函数不返回任何值。语法以下是update()方法的语法:dict.upd
- 微信小程序中的云开发想必大家还不是很熟悉,因为云开发也就是9月份上线的,相比之前大家对于数据库的存储都是用的是自己的服务器,接下来这篇文章主
- 概述:可以将.py源代码转换成无需源代码的可执行文件(直接就可以运行的程序)因为有的时候Windows,Mac,Linux系统上并没有安装P
- 一、定义集合中的元素是无序的、唯一的、不可变的类型。集合是一个特殊的列表,可以对数据去重。lists = [1,3,5,7,3,4,6,2,
- 本文实例讲述了Python使用lambda表达式对字典排序操作。分享给大家供大家参考,具体如下:lambda表达式也常用于字典排序,既然写到
- 前言判断文件是否存在在实际应用中用的非常多,下面我们来归纳一下检查文件、文件夹是否存在的各种操作一.检查文件夹/文件是否存在1. os.pa
- Embedding的近邻搜索是当前图推荐系统非常重要的一种召回方式,通过item2vec、矩阵分解、双塔DNN等方式都能够产出训练好的use
- 今天刷二级题的时候,遇到一个问题>>> L2=[1,2,3,4]>>> L3=L2.reverse()&
- 本文实例讲述了Python使用numpy产生正态分布随机数的向量或矩阵操作。分享给大家供大家参考,具体如下:简单来说,正态分布(Normal
- 我们的目标是秒杀淘宝或京东等的订单,这里面有几个关键点,首先需要登录淘宝或京东,其次你需要准备好订单,最后要在指定时间快速提交订单。这里就要
- MySQL扩展库操作MySQL数据库的步骤如下:1:获取连接.2:选取书库。3:设置操作编码。4:发送SQL指令(MySQL数据库可以分为四
- (本篇部分代码综合整理自B站,B站有手把手说明的教程)1.网易云非付费内容爬取器(声明:由于技术十分简单,未到触犯软件使用规则的程度)驱动E
- 有以下两种方式启用警告框的可取消(dismissal)功能:1、通过 data 属性:通过数据 API(Data API)添加可取消功能,只
- 在实际的工作中,尤其是在生产环境里边,SQL语句的优化问题十分的重要,它对数据库的性能的提升也起着显著的作用.我们总是在抱怨机器的性能问题,
- 本文实例讲述了MySQL游标概念与用法。分享给大家供大家参考,具体如下:1、游标的概念(Cursor)一条sql,对应N条资源,取出资源的接
- 背景:由于需要对ocr识别系统的表格识别结果做验证,通过返回的json文件结果对比比较麻烦,故需要将json文件里面的识别结果还原为表格做验
- 前言终于下定决心学习Python了。既然从头开始,就需要认认真真。首先需要说的是,我是初学Python,这篇文章只是用于展示global和n