zoukankan      html  css  js  c++  java
  • JS_变量

    1.js是untyped的语言,或者说弱类型的,不想c#,java这些强类型语言,定义变量必须明确变量类型为string ,int ,bool(当然c#支持var,但编译器已经处理变量为对应的类型了,与js不一样),js定义所有变量都是用var,而后可以随意修改变量值,如下代码:

    1 var i = 23;//number
    2 i = "hello";//string
    3 i = true;//boolean
    4 alert(i);//true

    2.变量的种类:全局变量  局部变量

    如果变量定义不用var声明,则该变量为全局变量,但这可能会与预期不一致,一个好的习惯就是,定义所有变量都用var;

    如果局部变量与全局变量名称一致,则在局部变量的作用范围内局部变量会覆盖全局变量的值:

    1 var v = "global";
    2 function test1() {
    3     var v = "local";
    4     alert(v);
    5 }
    6
    7 test1();//local

    3.作用范围
    global变量作用范围为整个js文件,而local变量范围为定义其变量所在的代码块(如:function,loop,function中的params),有种情况特别注意:局部变量的生效范围是贯穿其作用域始终的,而不是自其定义出开始生效,如下代码:

    1 var v2 = "global";
    2 function test2() {
    3     alert(v2);//undefined
    4     var v2 = "local";
    5     alert(v2);//local
    6 }
    7 test2();

    尽管v2变量在function外部已经定义,但由于test2()内部有定义v2,所以在test2()的v2是与外部无关的,只是第一次alert时,其变量尚未初始化,为undefined,之后赋值变为local,因此另一个建议:function中的变量定义最好都放在function最开始处。再如下例,局部变量的作用范围是不限代码块的(for循环、if语句):

     1 function test3(x) {
     2     if (typeof x == "object") {
     3         var t = 1;
     4         function subTest3() {
     5             for (var i = 0; i < 10; i++) {
     6                 //do nothing
     7             }
     8             alert(i);//9 i is defined everywhere,not only loop.
     9         }
    10         subTest3();
    11     }
    12     alert(t);//1 t is defined everywhere,not only block.
    13 }
    14 
    15 test3({ name: "wang" });//test the function test3() with an object param.

    4.变量类型的相互转化

    之前有提到过,js中类型的转换是根据需要默认转的,如:var s="hello"; s=s+22; 自动将22转换成string类型,拼接成hello22,不多说

    5.值类型与引用类型

    js中的类型分两类:primitive类型--int,boolean,null,undefined,值在内存中所占大小固定不变,为值类型

             function,arrary,function,在内存中大小不固定,为引用类型

             至于string,算是特殊类型吧,尽管在内存中大小不定(string长度不定),但string是固定不变的,讨论其是值类型还是引用类型是无意义的(moot),就当是个独特的存在吧

    1 var a = 11;
    2 var b = a;
    3 a = "hello";
    4 alert(b);//11 b没有变,因为b,a是两个独立值
    5 
    6 var a = new Array(1, 2, 3, 4);
    7 var b = a;
    8 b[0] = "yes";
    9 alert(a);//yes,2,3,4 array是引用类型,a,b指向同一array
  • 相关阅读:
    JAVA中的注解小结
    终结任务
    共享资源访问
    基本线程机制
    HashSet、LinkedHashSet、TreeSet
    EnumMap
    LinkedHashMap及其源码分析
    集合迭代器快速失败行为及CopyOnWriteArrayList
    LinkedList
    比特币中的Base58 编码
  • 原文地址:https://www.cnblogs.com/baweier2013/p/5103928.html
Copyright © 2011-2022 走看看