zoukankan      html  css  js  c++  java
  • javascript学习笔记[1]变量

         每天收获一点,慢慢地就多了。

         今天开始正式学习javascript,虽然以前都有一些涉及,但是没有好好的系统的学上一编,趁这段寒假,多学一点总是好的,坚持就是胜利,废话不多说了。

         1. 数据类型:

          简单(基本)数据类型:Boolean, Number,String,Undefined,Null。

          复杂数据类型:Array,Object等。

         2.区分undefined 和 null

             Null:

              (1) null 意味着没有值,即缺少数据。

              (2)包含 null 的变量包含“无值”或“无对象”。换句话说,该变量没有保存有效的数、字符串、boolean、数组或对象。可以通过给一个变量赋 null 值来清除变量      的内容。 

              (3) Null类型只有一个值的数据类型,这个特殊的值是null。从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null时会返回"object"的原因(null是一种特殊的object)

             Undefined:

              (1) undefined常量用于尚未初始化的变量或未初始化的动态对象属性的特殊值(未定义的值和定义未赋值的为undefined)

               (2)   Undefined类型只有一个值,即特殊的undefined(注意大小写,用的时候也不用加引号,人家不是string)。在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined

          实际上,undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true,但是使用全等运算符(===)对null和undefined进行比较时,比较结果为不相等。

         3. 区分等于(==)和全等于(===)

             重点:等于(==)的情况下只要值相同就返回True;

                       而全等(===)的时候需要值和类型都要匹配才能返回True.具体看堆栈的区别及逻辑等和逻辑全等

          4.变量的声明:

                 4.1 变量的声明必须使用var。

    a=10;

               这仅仅是给全局对象创建了一个新属性(但它不是变量)。“不是变量”并不是说它不能被改变,而是指它不符合ECMAScript规范中的变量概念,所以它“不是变量”,这个也是我的盲区,我是参考了汤姆大叔的博客才知道的。详细分析参考深入理解JavaScript系列(12):变量对象(Variable Object)

              4.2 变量声明提升

                    这个比较好理解,执行器会将所有的变量声明移到语句的顶部,如果是在函数的内部声明局部变量,那么就会将变量声明提升到函数体内的最顶部。这个只是针对声明语句。

             4.3 变量的传值和传址

                  传值:

    var i = 10;
    var j = i;   //输出 10
    alert(i);
    i = 30;
    alert(j);   //输出10
    
    
    
    
    function sqrt(x){
        return x*x;
    }
    
    var inValue = 3;
    var outResult = sqrt(inValue);
    alert(outResult);    //输出 9
    alert(inValue);       //输出 3

              传址:

    var myArray = ["tom", "dick"];
    var newArray = myArray;
    alert(newArray[1]);      //输出dick
    myArray[1] = "jack";
    alert(newArray[1]);       //输出jack

            4.4 内存使用规则-堆和栈

                堆:为复杂数据类型分配空间,例如数组,Object对象,运行时动态的分配内存,速度慢。

                栈:基本类型的变量和对象的引用,速度快,可以共享(这边数据共享还有些不理解。)’

               总而言之,javascript堆不需要程序代码显式地释放,会有自动的垃圾回收机制。但是为了提高程序性能,还是可以自己释放的,最常用的方法就是对其赋值为null。

                注意点:

    var str = new String("abc");  //对象存放在堆中
    var str = "abc";            //栈中存放值“abc”和对值的引用
    //推荐使用第二种创建方法

               堆栈的区别及逻辑等和逻辑全等

                

    //只是比较栈中的值,不管逻辑等于还是逻辑全等于运算都返回true,可以看出str1.str2指向同一个值、
    var str1 = "abc";
    var str2 = "abc";
    alert(str1 == str2);       //true
    alert(str1 ===str2);     //true
    
    //实际比较的是堆中的内容,不管是逻辑等于还是逻辑全等于运算都返回false、可以看出str1,str2指向的不是同一个对象。
    var str1 = new String("abc");
    var str2 = new String("abc");
    alert(str1 == str2);      //false
    alert(str1 === str2);  //false
    
    //比较堆中和栈中的值,进行逻辑等于运算的时候,会首先将变量转成相同的数据类型,然后进行对比,所以返回true,但是逻辑全等于会对数据类型进行比较,看是否引用了同一个数据,返回false
    var str1 = new String("abc");
    var str2 = "abc";
    alert(str1 == str2);      //true
    alert(str1 === str2);     //false

                  今天先写这么多吧,其实还有好多地方需要学习的,比方typeof,数据类型转换,array,object。

                  有关变量的知识很多都是参考了网上一些别人写得博客,以下附上链接:

                     深入理解JavaScript系列(12):变量对象(Variable Object)
                     Javascript 中 null、NaN和undefined的区别
                     JavaScript之数据类型
                     javascript定义对象
                     javascript动态添加、修改、删除对象的属性和方法

                 以上全部都属个人原创,请大家转载的时候附上原创链接: http://www.cnblogs.com/tonylp

  • 相关阅读:
    asp.net mvc3开发系统点滴之一
    C# winform 广告机 网络多媒体发布系统桌面版之一
    asp.net mvc3开发系统点滴之三
    js面向对象开发互联网机顶盒应用头端之五
    asp.net mvc3开发系统点滴之二
    【转载】指针空间的申请和释放(C)
    [转载]C 指针
    hoj2036
    hoj1142
    hoj1878
  • 原文地址:https://www.cnblogs.com/tonylp/p/2878206.html
Copyright © 2011-2022 走看看