zoukankan      html  css  js  c++  java
  • javascript 中为什么要用typeof x ===‘undefined’

    0. undefined  本身的介绍
        undefined is a property of the global object, i.e. it is a variable in global scope.
        JavaScript 1.8.5 note

    Starting in JavaScript 1.8.5 (Firefox 4), undefined is non-writable, as per the ECMAScript 5 specification.

    1.关于undefined值的判断:
     有 a:x== undefined,b: x===undefined,c:typeof x == 'undefined';d:typeof x === 'undefined'
    a方式 的缺陷:x=null,时x== undefined 返回true;
    why???原因是==符号隐含了一次类型转换操作。。。很不幸 null能转成undefined(反之亦可).
    b方式的缺陷:当x未声明时,b会报变量未声明的错误。。。
    也可以通过window.x===undefined来表示。。。这时候你就得记着你判断的成员是属于哪个对象的了
    c,d方式避免了b的缺陷。。。不必考虑x是全局还是本域了
     
    此外考虑下面代码:
    function foo(){
        if(!bool){
         alert(bool);   
        }
        var bool = true;
    }
     是不是会认为会报变量未声明的错误?
    很遗憾,没有。。。
    原因在于js中变量的特殊创建逻辑:
    js引擎做语法分析,发现显示声明时。
    js引擎做代码执行,发现试图写一个未被创建的变量时。
     
    js中代码的运行实际上包含两个阶段,第一阶段是语法解释阶段(注意不是语法检测阶段),第二阶段就是执行阶段。
    当调用foo函数(foo())时,实际上js引擎先对foo函数进行了语法解释,此时由于语句中用var关键字显示声明了bool,按照js的变量创建逻辑,实际上在fool函数真实执行时bool已经存在,其值为undefined了。
    同样按照上述逻辑,代码中去掉var 关键字,马上就会出现变量未声明的错误了。
     
    关于js变量的生命周期,详细参见javascript 语言精髓与编程实践 第二版 p154
     
  • 相关阅读:
    matlab练习程序(单源最短路径Dijkstra)
    Android开发必须知道SERVICE的10件事
    Android 多种方式正确的加载图像,有效避免oom
    在Android中解决内存溢出 – OutOfMemoryError
    发布Android开源库,看这个文章就够了!
    发掘StateListAnimator的全部潜能
    Android开发中多进程共享数据
    Android使用FFMpeg实现推送视频直播流到服务器
    Android学Jni/Ndk 开发记录(一)
    一张图解释RxJava中的线程控制
  • 原文地址:https://www.cnblogs.com/lsjwzh/p/2961309.html
Copyright © 2011-2022 走看看