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

  • 相关阅读:
    飞入飞出效果
    【JSOI 2008】星球大战 Starwar
    POJ 1094 Sorting It All Out
    POJ 2728 Desert King
    【ZJOI 2008】树的统计 Count
    【SCOI 2009】生日快乐
    POJ 3580 SuperMemo
    POJ 1639 Picnic Planning
    POJ 2976 Dropping Tests
    SPOJ QTREE
  • 原文地址:https://www.cnblogs.com/del/p/1398056.html
Copyright © 2011-2022 走看看