zoukankan      html  css  js  c++  java
  • void 0 或者 undefined

    Problem

    在检查一个值是否为undefined的时候。你们是假设去測试的?

    要是之前的我会这样子測试

     
     function isUndefined(obj){
       return obj === undefined;
    }

    可是近期在看《javascript框架设计》这本书的时候,他用了第二种方法,我就有点纳闷了。

     
     function isUndefined(obj){
       return obj === void 0;
    }

    两者谁比較好点呢?怎样比較呢?应该从它的适用性、浏览器兼容性来比較!

    然后我就在MDN找到void操作符的定义和undefined的说明,才知道《javascript框架设计》中的方法略胜一筹。

    为什么呢?以下来解说

    Description

    void
    The void operator evaluates the given expression and then returns undefined.也是就是说void是一个操作符。它总是返回的是undefined这个值
    undefined
    The global undefined property represents the value undefined.就是说undefined事实上是一个全局变量,它的是就是代表着undefined。

    我们能够用window.hasOwnProperty("undefined");去測试,返回true就证明它是全局变量。

    既然它是全局变量的话,我们就能够改动它了,在改动一些特定变量方面ES3和ES5中是不一样的。ES3中每一个变量都是可写可配置可遍历的。可是ES5设置一些API去设置变量的这些特性。

    我们能够在chrome(支持ES5)的控制台敲上一句这样子的代码Object.getOwnPropertyDescriptor(window,"undefined"),我们能够看见他打印出来的是Object {value: undefined, writable: false, enumerable: false, configurable: false}

    能够看见在ES5中的undefined值是不能改动(即writable为false)的,可是在旧的浏览器比方IE7、8。你就能够改动undefined的值,导致你的isUndefined失去效果了。

    Why void 0, specifically?

    stackoverflow站点的一个问题有提到一定要用void 0吗?不能是void 1,void 10000,void "hello world" 或者其它吗?答案都是能够的,仅仅是0给人的感觉就是简短、惯用.

    Reference

    undefined
    void
    What does void 0 mean?

  • 相关阅读:
    程序员创业必读的几本书
    新手上路—Java的"瑞士军刀"
    小团队互联网创业记
    Coder必须自废的两样神功
    码界新手,如何更高效的解决问题
    【转载】FckEditor 2.6.3 for Java 2.4 配置
    struts2上传多文件(b)
    Java基础-Java中的Calendar和Date类
    JAVA加减日期
    Java程序员应该了解的10个面向对象设计原则
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6782973.html
Copyright © 2011-2022 走看看