zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    1093 Count PAT's(25 分)
    1089 Insert or Merge(25 分)
    1088 Rational Arithmetic(20 分)
    1081 Rational Sum(20 分)
    1069 The Black Hole of Numbers(20 分)
    1059 Prime Factors(25 分)
    1050 String Subtraction (20)
    根据生日计算员工年龄
    动态获取当前日期和时间
    对计数结果进行4舍5入
  • 原文地址:https://www.cnblogs.com/first-time/p/7156798.html
Copyright © 2011-2022 走看看