《JavaScript進階程式設計》讀書筆記 1-4章

來源:互聯網
上載者:User
第一章:JavaScript是什麼 

1.起源:做一些輸入有效性的驗證,減輕瀏覽器負擔

2.ECMAScript:JavaScript實現的基礎,是標準,但不是javascript唯一的部分。3.javascript組成:核心(ECMAScript),DOM(doucument object model),BOM(brower object model)4.ECMAScript:ECMAScript僅僅是一個描述,定義了指令碼語言的所有屬性,方法和對象。其他語言可以實現ECMAScript來作為功能的基準,如JavaScript5.DOM:DOM是HTML和XML的應用程式介面(API)。通過建立樹來表示文檔。DOM其實不是javascript專有的,只是瀏覽器內部已經通過ESMAScript實現了DOM,成為了javascript的重要組成部分6.BOM:可以對瀏覽器視窗進行訪問和操作。  第二章:ESMAScript基礎
1.文法   
區分大小寫,變數都是弱類型(var),建議每行結尾有分號。//單行注釋
 多行注釋。括弧標明代碼塊2.變數3.關鍵字4.ECMAScript原始類型: Null  Undefine
 string  Boolean Number5.typeof運算子     undefined  
 undefined 類型   boolean 
    boolean類型   number 
    number類型   string
    
   string
 類型   object 
     
 如果變數是一種參考型別或null類型  
現在認為null是對象對的預留位置6.Undefined類型   Undefined類型只有一個值,   當聲明的變數未賦值時,預設是undefined 
 當函數無明確傳回值時,傳回值也是undefined   typeof (temp) ==undefined
  為true7.Null類型 
 只有一個專用值null。值undefined實際上是從值null派生來的,因為ECMAScript認為他倆相等 
 儘管這兩個值相等,但含義不同。null用於表示尚未存在的對象。將變數設為null意味著允許回收8.Boolean類型    非0即true9.Number類型   
直接輸入的(而不是從另一個變數訪問的)任何數字都被看做是Number類型10.string類型11.轉換    ① 轉換成string     
  boolean  string
 number都有tostring()方法。值得一提的是,number的tostring()方法有兩種方式,第一種是普通的,第二種是tostring(num),可以轉換成num進位    ②轉換成number     
  ParseInt()  
ParseFloat()方法,若轉換不成,則返回NaN     
  ParseInt(‘1234ABC’)
 將返回1234    ③強制轉換類型     
   
 Boolean(value)
當轉換的值至少有一個字元的字串,非0數字或對象時,返回true     
   
 Number(value)
轉換傳入的整個值,‘22.21.3’不能被轉換,和ParseInt不一樣     
   
 String(value)
 與tostring'()方法不同之處在於,強制轉換null和undefined時不會報錯12.參考型別   
 對象是由new運算子加上要執行個體化的類的名字建立的    var o=new
object();//這段代碼建立了object類的執行個體13.instanceof運算子     
類似typeof運算子,typeof運算返回對應的參考型別。instanceof返回boolean類型      var
s="asd";      if(s
instanceof string)14.運算子     
   ①一元運算子     
     
 1.delete  
刪除開發人員對以前定義的對象屬性或方法的引用     
     
 2.void
 該運算子對任何值都返回undefined。該運算子通常用於避免輸出不應該輸出的值。例如,從元素調用javascript時,函數不能有返回有效值,否則瀏覽器將清空頁面,顯示函數結果。最經典的使用就是     
     
 3.++  --     
     
 4.=+  =-     
    ②位元運算符     
     
  1.~   按位非     
     
  2.&   按位與     
     
  3.|  
 按位或     
     
  4.^  
 按位異或     
     
  5.<<
 左位移符     
     
  6.>>
 右移位符     
   
③在加法中,如果計算字串+數字,則數字轉換成字串,倆字串拼接     
     
  在減法,乘法,除法中,均是字串轉換成數字做計算     
     
 在比較中,字串轉換成數字     
   
 ④等號和非等號     
     
  為確定兩個運算數是否相等,這兩個運算子都會進行類型轉換     
     
  1.boolean類型先轉換為數字       
     
 
2.若運算子一個是字串,一個是數字,則字串通過強制轉換為數字。如('1234abc'==1234)返回false     
     
  3.若一個運算數是字串,另一個是對象,調用對象tostring()方法     
     
  4.null值與undefined相等     
     
  5.NaN!=NaN     
     
  6.若兩個運算數都是對象,則比較兩個運算數的引用值
15.函數   
 1.函數不用專門聲明傳回值。不管擁有有傳回值   
 2.函數不能重載,如果在同一範圍中定義兩個名字相同的函數,則實際調用的是後一個     
   使用arguments避免這種情況   
 3.ECMAScript最令人感興趣的是函數實際上是一個功能完整的對象     
    用function類直接建立方法:     
   var fun=new
function(args1,agrs2.....functionbody);     
   函數類也有toString()方法,返回函數體   
 4.函數閉包     
   簡而言之,就是可以訪問函數外定義的變數     
 
 簡而言之,閉包的作用就是在a執行完並返回後,閉包使得Javascript的記憶體回收機制GC不會收回a所佔用的資源,因為a的內建函式b的執行需要依賴a中的變數     
 
 閉包只是在形式和表現上像函數,但實際上不是函數。函數是一些可執行檔代碼,這些代碼在函數被定義後就確定了,不會在執行時發生變化,所以一個函數只有一個執行個體。閉包在運行時可以有多個執行個體,不同的引用環境和相同的函數組合可以產生不同的執行個體     
 
 閉包可以用在許多地方。它的最大用處有兩個,一個是前面提到的可以讀取函數內部的變數,另一個就是讓這些變數的值始終保持在記憶體中 第三章 對象基礎     
1.ECMAScript有無用儲存單元收集程式,意味著不比專門銷毀對象來釋放記憶體     
2.當再沒有對對象的引用時,稱該對象被廢除了。     
3.每當函數執行完,無用儲存單元收集程式變會運行。當然,還有一些不可預知的情況下,該程式也會運行     
4.將對象的所有引用設定為null,可以強制性的廢除對象          
5.早綁定與晚綁定     
   
 所謂綁定,是把對象的介面(我理解為定義)與對象執行個體結合在一起的方法      
   
 早綁定,是指在執行個體化對象之前定義它的特性和方法,java,VB中就是這樣     
   
 晚綁定,是指在編譯器或解釋程式在運行前,不知道對象的類型     
6.本機物件     
          
 7.Array類     
     
   var aValues=new Array();     
     
   var aValues=new
Array(20);     
     
   var aValues=new
Array("a","b","c");     
     
   var
aValues=["a","b","c"];      
     
   aValues[0]="a";     
     
   aValues[1]="b"     
     
   長度可以動態增長      
     
 
 aValues.toString()和aValues.valueOf()均返回數組中的值     
     
   aValues.join(char)
  類似C# string.join     
     
         
     
   數組提供操作最後一項的push()
 和  pop()  
兩個方法     
     
     
     
     
    第一項的方法  
shift() 和unshift() 方法      
   
      
8.內建對象     
 
 1.由ECMAScript實現提供的,獨立於宿主環境的所有對象,在ECMAScript程式開始執行時出現。即不必明確執行個體化內建對象,它已經被執行個體化了     
 
 2.ECMAScript中不存在獨立的函數,所有函數必須是某個對象的方法。     
     
 
 isNaN(),isFinite(),parseInt(),parseFloat()均為Global對象的方法     
     
 
 encodeURI()和encodeURIComponent()方法用於編碼傳遞給瀏覽器的URI     
     
 
 encodeURI()用於處理完整的URI,不對特殊符號編碼     
     
 
 encodeURIComponent()用於處理片段,對所有特殊符號編碼     
     
 
 decodeURI(),decodeURIComponent()     
   3.eval_r()
 號稱最為強大的方法,就像整個ECMAScript的解釋程式,接受一個參數。在運行時,將參數解釋為真正的語句,然後插入該函數所在的位置     
     
eval_r()在處理使用者傳遞輸入的資料時,容易造成代碼注入     
   4.另一個內建對象是Math     
     
   min()  
     
     
     
     
     
   pow()     
     
   max()  
     
     
     
     
     
   log()     
     
   abs()  
     
     
     
     
     
    sqrt()  
     
 random()   0-1
  配合floor使用    
     
        
     
   ceil()
 向上舍入函數    
     
    acos()  
     
  tan()     
     
   floor()
 向下舍入函數    
     
   asin()  
     
  sin()     
     
   round()  
標準的舍入函數      
 atan()    
     
cos()     
9.宿主對象     
     
   BOM
 DOM     
10.範圍     
     
   1.公用,受保護和私人範圍     
     
     
  ECMAScript範圍只有一種公用範圍,所有對象的所有屬性和方法都是公用的。     
     
     
  約定 _變數名   為私人成員     
     
   2.this關鍵字     
     
     
  this關鍵字總是指向調用該方法的對象     
 11.定義類或對象     
     
   1.工廠方式     
     
     
  function createCar(){     
     
     
     
 var oTempCar=new object;     
     
     
     
 oTemoCar.color="color";     
     
     
     
 oTemoCar.doors=4;     
     
     
     
 oTemoCar.showColor=function(){     
     
     
     
     
   
 alert(this.color);
                         }     
     
     
     
 return oTempCar

                    }

     
     
     
  var car1=createCar();     
     
     
  var car2=createCar();     
     
     
  如此建立了兩個car類,但會造成函數代碼重複的弊端     
     
    2.建構函式方式     
     
     
  function Car(sColor,iDoors,iMpg){
     
     
     
     
 this.color=sColor;     
     
     
     
 this.doors=iDoors;     
     
     
     
 this.mpg=iMpg;     
     
     
     
 this.showColor=function(){     
     
     
     
     
alert(this.color);
                         };                    }     
     
     
   var oCar1=new
Car("red",4,23);     
     
     
  var oCar2=new Car("blue",3,24);                     如此建立了兩個car類,但也會造成函數代碼重複的弊端     
     
     
   注意:new運算子調用函數式,在執行第一行代碼前先建立一個對象,只有this能訪問這個對象,並且在函數結尾自動return     
     
    3.原型方式     
     
     
  function Car(){
                    }     
     
     
  Car.prototype.color="red";     
     
     
  Car.prototype.doors=4;     
     
     
  Car.prototype.showColor=function(){
     
     
     
     
     
  alert(this.color);                    }     
     
     
   注意:在new
Car()時,原型的所有索性都被立即賦予要建立的對象,意味著所有Car執行個體都是儲存著指向showColor函數的指標
     
     
     4.完美方案
 混合的建構函式/原型方式     
     
     
  function Car(sColor,iDoors){     
     
     
     
     
this.sColor=sColor;     
     
     
     
     
this.iDoors=iDoors;                    }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.