javascript---不可靠的“undefined”

  undefined

    在 JavaScript 中,假设我们想判断一个是否是 undefined,那么我们通常会这样写:

  

if(a === undefined){//code}

但是,JavaScript 中的 undefined 并不可靠,我们试着写这样一个函数:

function test(a) {
  var undefined = 1;
  console.log(undefined); // => 1
  if(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

时间: 2024-09-30 00:27:21

javascript---不可靠的“undefined”的相关文章

JavaScript null and undefined

http://stackoverflow.com/questions/6429225/javascript-null-or-undefined var x; x == null // true x == undefined // true x === null // false x === undefined // true var y = null; y == null // true y == undefined // true y === null // true y === undefi

javascript中常见undefined与defined的区别

在JavaScript中相信"undefined"与"defined"对大家来说都肯定不陌生,但是又不是很清楚它们的区别,先看两个demo我们再说, 例1. console.log(parms); //在控制台出现 Uncaught ReferenceError: parms is not defined 例2. var flag; console.log(flag); //在控制台出现 undefined 通过上面两个例子就能很清楚的看出它两的区别了,not de

【温故而知新-Javascript】比较 undefined 和 null 值

JavaScript 中有两个特数值: undefined和null,在比较它们的时候需要留心.在读取未赋值的变量或试图读取对象没有的属性时得到的就是 undefined 值. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Learn4UndefinedAndNull</title> </head

Javascript数据类型之Undefined

Javascrip中的数据类型分为原始数据类型(primitive type)和对象数据类型(object type). 原始数据类型 原始数据类型包括:数字.字符串.布尔值.null.undefined. 对象数据类型 对象数据类型是Javascript中的数据类型中除了数字.字符串.布尔值之外的数据类型就都是对象类型了. 关于Javascript中的数据类型的简单介绍可参考:http://www.easy-dis.net/?p=161,这里就不详细介绍了.这里主要说一下undefined.

Javascript中的undefined、null、&quot;&quot;、0值和false的区别总结

在程序语言中定义的各种各样的数据类型中,我们都会为其定义一个"空值"或"假值",比如对象类型的空值null,.NET Framework中数据库字段的空值DBNull,boolean类型的假值false等等.在JavaScript中也有很多种的"空值"和"假值",那么它们都有什么共同点和不同点呢? 其实标题里面我已经列出了JavaScript中所有的"空值"和"假值",除了boolean

javascript中的undefined,null,&quot;&quot;,0和false的云集

在各种各样的数据类型中,我们都会为其定义一个"空值"或"假值",比如对象类型的空值null,.NET Framework中数据库字段的空值DBNull,boolean类型的假值false等等.在JavaScript中也有很多种的"空值"和"假值",那么它们都有什么共同点和不同点呢? 其实标题里面我已经列出了JavaScript中所有的"空值"和"假值",除了boolean值本身就是tru

JavaScript中的Undefined / Null 类型相关说明

1,综述: ※Undefined 和 Null是JavaScript中的两种数据类型(其他的类型还有:Boolean, String, Number, Object). ※Undefined类型只有一个值:undefined:Null类型也只有一个值:null. 2,Undefined类型相关说明: ※在使用了var声明了相关变量但未对其初始化时,这个变量的值就是undefined. ※这和未经声明(即未经定义)的变量不一样,如果使用未经声明的变量,会报错ReferenceError: s is

javascript Null、Undefined 、NaN的联系与区别

相信许多初学 javascript 都会有这种想法: 为什么 javascript 有 null 又有 undefined ,相对 C , C++ ,Java ,他们都是只有 null 而已,为什么 javascript 就不同 一.历史原因 通过网络搜索得知,1995年JavaScript诞生时,最初像Java一样,只设置了null作为表示"无"的值.根据C语言的传统,null被设计成可以自动转为0. 但是,JavaScript的设计者Brendan Eich,觉得这样做还不够,有两

Javascript中判断 Undefined 还是 Null 的方法

在 JavaScript 中, null 用于对象, undefined 用于变量,属性和方法. 对象只有被定义才有可能为 null,否则为 undefined. 如果我们想测试对象是否存在,在对象还没定义时将会抛出一个错误. 错误的使用方式: if (myObj !== null && typeof myObj !== "undefined") 正确的方式是我们需要先使用 typeof 来检测对象是否已定义: if (typeof myObj !== "un

JavaScript window与undefined作为参数的作用

1.原函数 输出结果:1 如图: 2.加window的参数 输出结果:window对象 如图: 注意:此时的window不是全局变量,而是局部变量 3.关于形参必须传window么?当然是不需要的 输出结果:window对象 如图: 形参可以传任意字符,只要实参传的是window.函数 4.作用一    代码会被压缩,节省空间 5.作用二   提高性能 函数在执行过程中,能在参数中找到window,就不用去全局作用域中找,即效率高,提高性能. 6.是否可以实参也不传? 可以,实参形参都不传,内部