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”相关推荐

  1. 7个处理JavaScript值为undefined的技巧

    我刚刚开始学习JavaScript时,大约是八年前,当时我对于undefined 和 null 比较困惑 ,因为他们都表示空值. 他们有什么明确的区别吗?他们似乎都可以定义一个空值,而且 当你进行 在 ...

  2. 区分JavaScript中的undefined,null和NaN

    区分underfined,null和NaN 先看看下面语句的运行结果: 1: var a; 2: alert(a); //显示"undefined" 3: alert(typeof ...

  3. html js布尔值怎么定义,JavaScript基本类型值-Undefined、Null、Boolean

    大致介绍 ECMAScript中有5中简单的数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number.String. Undefined Undefined时全局变量 ...

  4. javascript中的undefined,null,,0和false的云集

    在各种各样的数据类型中,我们都会为其定义一个"空值"或"假值",比如对象类型的空值null,.NET Framework中数据库字段的空值DBNull,bool ...

  5. javascript中的undefined 和 not defined

    经研究发现,两者之间有很大的区别,不知从英语讲,这两者都有啥区别,研究结果如下 测试os:ubuntu 测试浏览器:chrome 测试案例1 console.log(a) 报错 ReferenceEr ...

  6. javaScript中的undefined

    Undefined类型 Undefine类型只有一个值,就是undefined,通过let或者var声明的变量但没有初始化时,就相当于给变量赋予了undefined,对于const和不加修饰符的变量必 ...

  7. JavaScript undeclared 与 undefined 的区别

    undefined:声明了变量,但是没有赋值 undeclared:没有声明变量就直接使用 如上图,num 就是undefined,arr 则是 undeclared.

  8. JavaScript检查null与undefined以及==和===之间的差异

    如何检查变量是否为null或undefined并且null和undefined什么区别? ==和===什么区别(很难在Google上搜索" ===")? #1楼 区别是微妙的. 在 ...

  9. Javascript中的0,false,null,undefined,空字符串对比

    先看一段代码: <script type="text/javascript">alert(typeof (false) === "boolean") ...

  10. javascript中not defined、undefined、null以及NaN的区别

    [ 前言 ] 从踏入IT行业开始,我就发现技术人员写博客很有必要.如果不写博客,时间久了就像好比天天在外面建房子的人,没有一个自己的房子一样.不管学习紧不紧,工作忙不忙,多动手进行梳理总结,一方面是为 ...

最新文章

  1. 必学必会的nginx配置location匹配顺序总结
  2. Socket拉屎模型之二--实践篇
  3. BUUCTF [FlareOn1]Bob Doge [GXYCTF2019]
  4. 前百度智能硬件产品负责人邓晗:语⾳交互设计的原则
  5. 数据结构与算法 | 归并排序
  6. 三目运算符对比三个_Javascript之if条件语句和三目运算符
  7. 跟着阿里大牛捞干货:2019这5本书带你玩转大数据
  8. openwrt拦截snmp报文
  9. Dijkstra求最短路 II
  10. stm32学习笔记:点阵模块74HC595、APM4953
  11. 电脑怎么打出冒号符号_电脑键盘怎么打出冒号符号
  12. 【无标题】Ubuntu安装linaro工具链问题
  13. python二级考点
  14. python plot坐标轴显示比例一致_绘图,x轴和y轴的比例相同
  15. php股票t 0,股票T+0是什么意思?如何看懂股票T+0?
  16. 阿里旺铺运营怎样做到低价引流
  17. 360度解读山内溥:百年任天堂的传奇“基因”(转)
  18. Gala Games 推出最新的 3 款新游戏。
  19. [ZOJ 3054] Whirlwind [模拟]
  20. 100行python代码爬取5万条网易新闻评论

热门文章

  1. 红帽Linux6.0镜像文件在哪里下载,Linux(RHEL)5.4/5.5/5.8/6.0/6.3 ISO镜像文件-下载地址...
  2. ubuntu 15.10 升级 到Ubuntu 16.04.3 LTS
  3. linux 定时执行某个任务,多个时间段
  4. 2.13.PHP7.1 狐教程-【PHP 类】
  5. Mahout 安装配置及一个简单测试
  6. PHP Opcache(ZendOptimizerPlus)的安装配置详解
  7. Docker 镜像、容器 常用命令,容器与宿主服务器文件复制
  8. vue-cli3创建项目时报错
  9. C刷题记录-1020
  10. VS2013单元测试