第一章: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; }