• 理顺 JavaScript (4) 变量、常量与数据类型



    var v1 = 123;    /* 声明变量、同时初始化为数字 */
    var v2 = 'ABC';  /* 声明变量、同时初始化为字符串 */
    var v3,v4;       /* 已声明还没有初始化的变量, 类型未知(未知也是一种类型: undefined) */
    
    x = 1; y = 2;    /* 缺失 var(未声明)的变量也可以使用, 但会让编译器在幕后补充声明; 最好别这样 */
    alert(x + y);    /* 3 */
    

    JavaScript 到底有几种数据类型? 不如从例子中去解析:
    var X;                /* 先声明一个变量 X */
    alert(typeof X);      /* 用 typeof 函数查看其类型是: undefined */
    
    X = 123;              /* 赋予数字值 */
    alert(typeof X);      /* 此时的类型是: number */
    
    X = 'ABC';            /* 赋予字符串值 */
    alert(typeof X);      /* 此时的类型是: string */
    
    X = true;             /* 赋予布尔值(true 或 false) */
    alert(typeof X);      /* 此时的类型是: boolean */
    
    X = function(){};     /* 赋予一个函数 */
    alert(typeof X);      /* 此时的类型是: function */
    
    X = new Array(1,2,3); /* 赋予一个数组 */
    alert(typeof X);      /* 此时的类型是: object */
    
    X = new Date();       /* 赋予一个日期值 */
    alert(typeof X);      /* 此时的类型是: object */
    
    X = new RegExp();     /* 赋予一个正则表达式对象 */
    alert(typeof X);      /* 此时的类型是: object */
    
    X = new String();     /* 赋予一个字符串对象 */
    alert(typeof X);      /* 此时的类型是: object */
    
    X = new Boolean();    /* 赋予一个布尔对象 */
    alert(typeof X);      /* 此时的类型是: object */
    
    X = new Number();     /* 赋予一个数字对象 */
    alert(typeof X);      /* 此时的类型是: object */
    
    X = new Error();      /* 赋予一个 Error 对象 */
    alert(typeof X);      /* 此时的类型是: object */
    
    X = new Object();     /* 赋予一个 Object 对象 */ 
    alert(typeof X);      /* 此时的类型是: object */
    

    从例子中总结出 JavaScript 的数据类型:
    undefined /* 没有赋值或不存在的变量的类型 */
    number    /* 数字类型 */
    string    /* 字符串类型 */
    boolean   /* 布尔类型 */
    function  /* 函数类型 */
    object    /* 对象类型, 其中数组等都属于 object 类型 */
    

    可以从实践中求证一下:
    alert(typeof window);                            /* object */
    alert(typeof window.screen);                     /* object */
    alert(typeof window.closed);                     /* boolean */
    alert(typeof window.document);                   /* object */
    alert(typeof window.document.body);              /* object */
    alert(typeof window.document.body.offsetWidth);  /* number */
    alert(typeof window.document.body.clientHeight); /* number */
    alert(typeof window.document.title);             /* string */
    alert(typeof window.document.Title);             /* undefined */
    
    /* 上面最后一个是 undefined, 这表示对象或属性不存在; 
    因为 JS 区分大小写, document 对象不包含 Title 对象或属性, document 的标题属性应该是 title */
    

    从前面看到:
    既有一个 string 类型, 又有一个 String 对象;
    既有一个 number 类型, 又有一个 Number 对象;
    既有一个 boolean 类型, 又有一个 Bollean 对象...

    这是 JS 为了简单而带来的麻烦, 其实不用考虑那么多, 可以把 string 与 String 混起来使用, JS 编译器会在幕后处理一切; 譬如:
    var X = new String('ABC');  /* 此时 X 是 String 对象 */
    var Y = new String('123');  /* 此时 Y 是 String 对象 */
    var XY = X + Y;             /* 此时 XY 是 string 类型 */
    alert(XY);                  /* ABC123 */
    alert(XY.length);           /* 6 */
    
    var X = 'ABC';              /* 此时 X 是 string 类型 */
    var Y = '123';              /* 此时 Y 是 string 类型 */
    var XY = new String(X + Y); /* 此时 XY 是 String 对象 */
    alert(XY);                  /* ABC123 */
    alert(XY.length);           /* 6 */
    
    /* 上面的字符串长度属性(length) 本来是属于 String 对象的, string 类型的字符串照样使用; 
    这有可能是编译器迅速做了个转换; 在 JS 中任何类型的转换都是方便自由的. */
    

    说到 JavaScript 类型的简单化, 它的数值类型只有一个 number(类似与 Delphi 的 Double);
    也没有单个字符类型, 需要时给长度是 1 的字符串就是了.

    和 Delphi 的指针类似, 可以给 JS 的变量赋空值: null; 这个 null 和上面的 undefined 不好区别.
    null 是已赋值, 但是空值;
    undefined 是没赋值或不存在.
    alert(undefined == null);  /* true ; 简单地看, 它们差不多 */
    alert(undefined === null); /* false ; 仔细地看, 它们不一样 */
    
    /* null 作为空值(相当与 0)可以参与数值运算 */
    var X;
    X = 123 + null;      alert(X); /* 123 */
    X = 123 + undefined; alert(X); /* NaN */
    
    //JS 的理念应该是这样的:
    //未知类型也是类型, 没有赋值也是值: undefined;
    //空值也是值: null.
    

    再展示一个遭遇 null 和 undefined 的示例:


    还有一个 "常量" 的问题.
    JS 本来没有常量, 所谓的常量不过是提前赋值的变量而已.
    Infinity;                  /* 无穷大 */
    NaN;                       /* 非数字值 */
    Number.MAX_VALUE;          /* 最大数值(JS 可以表示的) */
    Number.MIN_VALUE;          /* 最小数值(JS 可以表示的) */
    Number.NaN;                /* 非数字值 */
    Number.NEGATIVE_INFINITY;  /* 负无穷大 */
    Number.POSITIVE_INFINITY;  /* 无穷大 */
    
    /* 取值测试: */
    alert(Number.MAX_VALUE);         /* 1.7976931348623157e+308 */
    alert(Number.MIN_VALUE);         /* 5e-324 */
    alert(Number.NaN);               /* NaN */
    alert(Number.NEGATIVE_INFINITY); /* -Infinity */
    alert(Number.POSITIVE_INFINITY); /* Infinity */
    alert(Infinity);                 /* Infinity */
    alert(NaN);                      /* NaN */
    
    /* 常量还有其它, 譬如(IE7): */
    alert(window.navigator.appCodeName); /* Mozilla - 浏览器代码*/
    alert(window.navigator.appName);     /* Microsoft Internet Explorer - 浏览器名称 */
    alert(window.navigator.appVersion);  /* 4.0 ... - 浏览器版本 */
    

    另外, 浏览器中 JS 的全局变量都直属浏览器的 window 对象, 尽管常常省略这个前缀:
    var X = 111;
    alert(window.X); /* 111 */
    
    window.Y = 222;  
    alert(Y);        /* 222 */
    
    function MyFun(x, y) {
      return x + y;
    }
    alert(MyFun(1, 2));        /* 3 */
    alert(window.MyFun(1, 2)); /* 3 */
    

  • 相关阅读:
    python练习册 0002随机生成验证
    女生应该找什么样的男生
    博弈论 尼姆博弈,人生第一道博弈纪念一下
    博弈论版版
    博弈论
    STL用法大全
    据说是Flord算法
    20190716-T3-奇袭
    20190716-T1-礼物
    20190716-被水题淹没
  • 原文地址:https://www.cnblogs.com/del/p/1398056.html
Copyright © 2020-2023  润新知