javascript---不可靠的“undefined”
undefined
在 JavaScript 中,假设我们想判断一个是否是 undefined
,那么我们通常会这样写:
if(a === undefined){//code}
但是,JavaScript 中的 undefined
并不可靠,我们试着写这样一个函数:
function test(a) {var undefined = 1;console.log(undefined); // => 1if(a===undefined) {// ... } }
可以看到,undefined
被轻易地修改为了 1
,使得我们之后的对于 undefined
理解引起歧义。所以,在 JavaScript 中,把 undefined
直接解释为 “未定义” 是有风险的,因为这个标识符可能被篡改。
在 ES5 之前,全局的 undefined
也是可以被修改的,而在 ES5 中,该标识符被设计为了只读标识符, 假如你现在的浏览器不是太老,你可以在控制台中输入以下语句测试一下:
undefined = 1; console.log(undefined); // => undefined
现在我们能够明确的,标识符 undefined
并不能真正反映 “未定义”,所以我们得通过其他手段获得这一语义。幸好 JavaScript 还提供了 void
运算符,该运算符会对指定的表达式求值,并返回受信任的 undefined
:
void expression
最常见的用法是通过以下运算来获得 undefined
,表达式为 0
时的运算开销最小:
void 0; // or void(0);
所有需要获得 undefined
地方,都通过 void 0
进行了替代
当然,获取undefined还有另一种方式:看过jquery源码的同学,应该知道里面的立即执行函数:
(function(window,undefined) {// ... })(window)
在这个函数中,我们没有向其传递第二参数(形参名叫 undefined
),那么第二个参数的值就会被认为 “未定义”,因此,通过这种方式,在该函数的作用域中所有的 undefined
都为受信的 undefined
。是不是很妙啊!!
摘自----https://yoyoyohamapi.gitbooks.io/undersercore-analysis/content/base/undefined%E7%9A%84%E5%A4%84%E7%90%86.html
转载于:https://www.cnblogs.com/first-time/p/7156798.html
javascript---不可靠的“undefined”相关推荐
- 7个处理JavaScript值为undefined的技巧
我刚刚开始学习JavaScript时,大约是八年前,当时我对于undefined 和 null 比较困惑 ,因为他们都表示空值. 他们有什么明确的区别吗?他们似乎都可以定义一个空值,而且 当你进行 在 ...
- 区分JavaScript中的undefined,null和NaN
区分underfined,null和NaN 先看看下面语句的运行结果: 1: var a; 2: alert(a); //显示"undefined" 3: alert(typeof ...
- html js布尔值怎么定义,JavaScript基本类型值-Undefined、Null、Boolean
大致介绍 ECMAScript中有5中简单的数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number.String. Undefined Undefined时全局变量 ...
- javascript中的undefined,null,,0和false的云集
在各种各样的数据类型中,我们都会为其定义一个"空值"或"假值",比如对象类型的空值null,.NET Framework中数据库字段的空值DBNull,bool ...
- javascript中的undefined 和 not defined
经研究发现,两者之间有很大的区别,不知从英语讲,这两者都有啥区别,研究结果如下 测试os:ubuntu 测试浏览器:chrome 测试案例1 console.log(a) 报错 ReferenceEr ...
- javaScript中的undefined
Undefined类型 Undefine类型只有一个值,就是undefined,通过let或者var声明的变量但没有初始化时,就相当于给变量赋予了undefined,对于const和不加修饰符的变量必 ...
- JavaScript undeclared 与 undefined 的区别
undefined:声明了变量,但是没有赋值 undeclared:没有声明变量就直接使用 如上图,num 就是undefined,arr 则是 undeclared.
- JavaScript检查null与undefined以及==和===之间的差异
如何检查变量是否为null或undefined并且null和undefined什么区别? ==和===什么区别(很难在Google上搜索" ===")? #1楼 区别是微妙的. 在 ...
- Javascript中的0,false,null,undefined,空字符串对比
先看一段代码: <script type="text/javascript">alert(typeof (false) === "boolean") ...
- javascript中not defined、undefined、null以及NaN的区别
[ 前言 ] 从踏入IT行业开始,我就发现技术人员写博客很有必要.如果不写博客,时间久了就像好比天天在外面建房子的人,没有一个自己的房子一样.不管学习紧不紧,工作忙不忙,多动手进行梳理总结,一方面是为 ...
最新文章
- 必学必会的nginx配置location匹配顺序总结
- Socket拉屎模型之二--实践篇
- BUUCTF [FlareOn1]Bob Doge [GXYCTF2019]
- 前百度智能硬件产品负责人邓晗:语⾳交互设计的原则
- 数据结构与算法 | 归并排序
- 三目运算符对比三个_Javascript之if条件语句和三目运算符
- 跟着阿里大牛捞干货:2019这5本书带你玩转大数据
- openwrt拦截snmp报文
- Dijkstra求最短路 II
- stm32学习笔记:点阵模块74HC595、APM4953
- 电脑怎么打出冒号符号_电脑键盘怎么打出冒号符号
- 【无标题】Ubuntu安装linaro工具链问题
- python二级考点
- python plot坐标轴显示比例一致_绘图,x轴和y轴的比例相同
- php股票t 0,股票T+0是什么意思?如何看懂股票T+0?
- 阿里旺铺运营怎样做到低价引流
- 360度解读山内溥:百年任天堂的传奇“基因”(转)
- Gala Games 推出最新的 3 款新游戏。
- [ZOJ 3054] Whirlwind [模拟]
- 100行python代码爬取5万条网易新闻评论
热门文章
- 红帽Linux6.0镜像文件在哪里下载,Linux(RHEL)5.4/5.5/5.8/6.0/6.3 ISO镜像文件-下载地址...
- ubuntu 15.10 升级 到Ubuntu 16.04.3 LTS
- linux 定时执行某个任务,多个时间段
- 2.13.PHP7.1 狐教程-【PHP 类】
- Mahout 安装配置及一个简单测试
- PHP Opcache(ZendOptimizerPlus)的安装配置详解
- Docker 镜像、容器 常用命令,容器与宿主服务器文件复制
- vue-cli3创建项目时报错
- C刷题记录-1020
- VS2013单元测试