js进阶提升

这是我自己平时忽略的一些知识点,记录下来。

一、js中两种类型 :值类型和引用类型

      比如 var num=5;与 var num=new number(5);

二、undefined 与null

    undefined:表示对象没有被定义或者没有被初始化;是从null派生出来的
     null:表示一个尚未存在的对象占位符;
     alert(null==undefined);  //输出“true”

三、typeof运算完返回的是字符串
 typeof  undefined:  “undefined”
             null:              “object”
             string:          “string”
            number :      “number”
            boolean:       “Boolean”
            function:      “function”
            object:           “object”
所以  if(typeof num2=="undefined"){  } ,而不是if(typeof num2==undefined){  }
还要提醒,一个没有返回值的function(或者直接return返回)实际上返回的是undefined。
        function voidMethod()
        {
            return;
        }
        alert(voidMethod());    //输出  "undefined"

四、js中的变量创建
         局部变量:var  bianliang="hehe";(显示定义)
             全局变量: bianliang="haha";     (隐式定义)

五、学习三种命名成员方法
Camel命名法:首字母小写,接下来的每个单词首字母大写。
      比如:var firstName, var myColor;
Pascal命名法:首字母大写,接下来的每个单词首字母大写。
     比如:var FirstName, var MyColor;
匈牙利类型命名法:在以Pascal命名法的变量前附加一个小写字母来说明该变量的类型。例如s表示字符串,则声明一个字符串类型的变量为:
     比如:var sFirstName;
在JavaScript中应该使用匈牙利命名法命名变量,使用Camel命名法命名函数。
虽然JavaScript中的变量可以变换类型,但是熟悉强类型语言的人都知道,这是很危险的做法,很有可能最后在使用时都无法确定变量的类型。所以应该尽量使用匈牙利命名法命名变量,下面是匈牙利命名法的前缀列表:
     类型          前缀       示例
   Array           a             aNameList
   Boolean      b             bVisible
   Float            f              fMoney
   Function     fn            fnMethod
   Int                i              iAge
   Object        o             oType
   Regexp      re            rePattern
   string          s             sName
  可变类型     v             vObj

六、全局变量和闭包
全局变量的作用于是当前窗口Window对象,所以一个全局对象就是一个Window对象的一个属性;
  举例:    function test()  { sName = " ziqiu.zhang ";  }
                  test();
                 alert(sName);
                 alert(window.sName);   //结果一样

闭包:说白了就是包含变量的函数,由于在该函数中用到变量。
例子:
 <script type="text/JavaScript">
        function start()
        {
            var count = 10;
       //设置定时器,每隔3秒钟执行一次
            window.setInterval(function()
            {    
                document.getElementById("divResult").innerHTML += count + "<br/>";
                count++;
            }, 2000);
        };
        start();
    </script>
说明匿名函数function就是一个闭包,因此里面用到的count变量会一直保存在闭包里。

七、javascript中的 function
程序是由数据和逻辑两部分组成的;基本的数据类型可以存储各类数据,而function可以存储逻辑。
(1)function可以声明一个方法和一个类型(也就是类)
     例子: function testMethod(){    }              function Car(){     }
(2)js中function的本质: function 变量是引用类型,内容存储的是指向function内容的指针,js中的对象有一个特点就是里面不管属性还是方法都是以name/value这种字典数组存储的。
    例子  alert(testMethod);   会弹出整个方法内容。
(3)js中的function不支持重载,因为js中同名的function只能有一个,并且function函数的参数可以是任意个。但是function有个重要的参数就是 arguments,可以访问到传入function的所有参数信息。根据参数的信息在函数内部if  else 来完成 重载功能,but不提倡。
    例子: arguments.length;  arguments[index]分别可以获取传入参数的个数以及每个参数的信息
(4)js中的this指向函数调用者(此特性在jQuery中表现为链式编程)
   例子: var oName = { name: "zhang" };   //这一个object的数据类型
                window.name = "I am window";
                //showName是一个函数,用来显示对象的name属性
               function showName()    //Window下的一个全局方法
               {
               alert(this.name);  //哪个对象调用这个函数就显示哪个对象的name
                }
            //相当于函数的声明
            oName.show = showName;  //  根据function的本质可以看作是一个属性调用
            window.show = showName;

        showName(); //输出 输出为 "I am window"
        oName.show(); //输出 输出为 "zhang"
        window.show(); //输出 输出为 "I am window" 
    

八、js中的原型(prototype)
(1) prototype:表示声明的函数和属性属于动态的;
区别动态和静态属性和方法,动态的属性和方法必须由实例化的对象调用,静态方法和属性直接由类调用。
声明和调用时的区别:举例说明:
声明:function staticClass() { }; //声明一个类
            staticClass.staticMethod = function() { alert("static method") }; //创建一个静态方法
            staticClass.prototype.instanceMethod = function() { "instance method" }; //创建一个实例方法
调用:staticClass.staticMethod();
            staticClass.instanceMethod(); //语句错误, 无法运行.
            //实例方法需要首先实例化后才能调用:
            var instance = new staticClass();//首先实例化
            instance.instanceMethod(); //在实例上可以调用实例方法
js中正是由于使用prototype才使得js面向对象,才使得对象可以调用方法和属性(使用this声明动态属性)
当前创建类有好多中方法,但是最常见的还是--动态原型方法,动态原型方法的精髓在于使用prototype声明实例方法,使用this声明实例属性。
(2) 使用原型链实现继承
在JavaScript中可以通过prototype来实现对象的继承。
举例:GoodCar.prototype = new Car();    // GoodCar这个类继承Car这个类
此时GoodCar这个类中已经包含父类Car的所有属性和方法了,接下来就是添加自己的属性和方法了。
        function GoodCar(){        }
        GoodCar.prototype = new Car();
        GoodCar.prototype.run = function() { alert("run fast"); }

GoodCar类自身的方法一定要在实现继承语句之后定义;
为什么称这种方式为原型链继承呢?因为GoodCar的prototype是Car,而Car的prototype是object,也就是说GoodCar也具有object对象所有的属性和方法。这是一个“链”的结构。

你可能感兴趣的:(js进阶提升)