Javascript的精華啊【若是之後我看到了或者想到了再繼續補吧】

我不過略有一些討人喜歡的地方而已,怎麼會有什麼迷人的魔力呢?編程

一.語法

JS只有一個數字類型,64位浮點數,因此11.0是相同的。爲何這麼設計:防止短整型的溢出。閉包

 

二.對象

1.一般將一個對象的值賦給另外一個變量的賦值方法

if(car.name!=null){
    a=car.name;  
}else{
    a='unknown';
}

小技巧(給默認值):app

a=car.name||"unknown";

 2.嘗試從一個對象的屬性中取值

一般編程語言

if(car!=undefined){
   a=car.age;
} 
       

小技巧:函數

a=car&&car.age;

3.枚舉屬性

一般咱們會簡單的使用for inthis

var name;
for(name in  car ){
   ...
}

這樣的後果就是遍歷出來的屬性你可能沒法預知,會遍歷到原型上的屬性spa

 

小技巧:不適用for in,取而代之用for循環設計

var properties=[
     'name',
     'status',
      'useTime'
];

for(var i=0;i<properties.length;i++){
    car[properties[i]]  ...
}

4.刪除屬性

這個東西估計不多有人會使用到,可是存在既有道理,我就遇到過一個場景,在使用一個第三方的類庫的時候,類庫提供的方法建立的對象有我不須要的屬性,而我要將這個對象轉化爲JSON格式的字符串,這個時候刪除屬性這個功能尤爲的強大。code

Delete car.name ;

三.函數

1.調用

JS中有4種調用方式對象

  • 方法調用模式
  • 函數調用模式
  • 構造器調用模式
  • apply調用模式

四種模式的差別在於 this指向

方法調用模式很好理解,咱們寫C#定義一個類CAR,給CAR定義一個方法RUN,這個時候實例化一個對象 jeep ,那麼方法調用就是 jeep.RUN();

JS中一樣如此  

var jeep ={
    run:function(){
     ...
    }
};


jeep.run();

this的指向爲調用的對象。

函數調用模式,以下add2函數被調用的方式,直接寫函數名

        function add(a, b) {
            return a + b;
        }
       var shuxue={};
       shuxue.calculate1 = function () {
            var add2 = function () {
                this.value=this.add(3, 3);
            }

           add2();//函數調用模式

        }
        shuxue.calculate1();//方法調用模式
        document.write(shuxue.value);//undefined

        shuxue.calculate2 = function () {
            var that=this;
            var add2 = function () {
                that.value=this.add(3, 3);
            }

            add2();//函數調用模式

        }
        shuxue.calculate2();//方法調用模式
        document.write(shuxue.value);//6

這裏的this指向有點問題,JS設計之初把它指向了全局,若是這樣就會致使上面代碼的異常,代碼定義了一個shuxue的對象,並給他定義了2個方法calculate1和calculate2,咱們發現都一樣在函數內部調用了add2函數,add2函數內試圖給對象增長一個屬性

value,calculate1的方式失敗了,calculate2的方式成功了,區別在於後者把this(這時候的this是指向該函數的)給了函數的內部變量that,固定了下來,內嵌的函數使用外部函數的變量,也就是造成了閉包,前者this指向全局。

構造器調用模式

var Car=function(){};

var jeep=new Car();  //有個約定,若是函數是用來new的,那麼大寫開頭,以區別於通常的函數

this指向這個new的對象

apply調用模式

JS是一門函數式的面向對象編程語言,因此函數能夠擁有方法

        function add(a, b) {
        return a + b;
        }

        var result=add.apply(null,[3,4]);
        document.write(result);// 7

        function getName(){
            return this.name;
        }

        var car={name:'jeep'};

        var name=getName.apply(car);//  car並無getName方法
        document.write(name); //  jeep

   this指向apply第一個參數

2.模塊

 咱們知道JS很容易形成全局變量的濫用,因此JS提供了一個方法,利用閉包和和函數做用域(JS沒有塊級做用域ES6以前)構造模塊

        var man=function(){
            var age=12;
            return {
                getYear:function(){
                    return age;
                },
                setYear:function(n){
                    age=n;
                }
            }
        }

        var peter=man();
        document.write(peter.getYear()); //12
        peter.setYear(20);
        document.write(peter.getYear());//20
        document.write(peter.age); //undefined 屬性私有隻能經過接口訪問

 

3.級聯

這個已經被廣大程序猿們所喜好了

    var man=function(){
            var age=12;
            return {
                getYear:function(){
                   alert(age);
                    return this;
                },
                setYear:function(n){
                    age=n;
                    return this;
                }
            }
        }

        var peter=man();
        peter.getYear().setYear(20).getYear();  //級聯
相關文章
相關標籤/搜索