標籤:方法 foreach 優點 應用 具名引數 UNC 前端 this names
垃圾收集原理:
找出不再使用的變數,然後釋放其記憶體。
js中最常用的垃圾收集方法是標記清除,當變數進入環境時,就將變數標記為“進入環境”,當變數離開環境時,將其標記為“離開環境”,最後由垃圾收集器完成記憶體清除工作。
另一種不太常見的垃圾收集原理是引用計數,它跟蹤每個值被引用的次數,當引用次數為0時,垃圾收集器會釋放其記憶體,但是有可能造成循環參考的問題,這種情況下可以手動把引用設定為null。
通常Web瀏覽器的可用記憶體比分配給傳統型應用程式的少,因此要確保佔用最少的記憶體可以讓頁面獲得更好地效能,所以代碼中只儲存必要的資料,一旦資料不再有用,最好手動將其值設定為null,來釋放其引用——這個做法叫做解除引用。
參考型別:
定義:參考型別的值(對象)是參考型別的一個執行個體。
建立Object執行個體的方式:
1.new操作符後跟object建構函式。
2.使用對象字面量標記法。
1 var person = {2 name : "Annika",3 age : 294 }
注意:用逗號來分隔不同的屬性,最後一個屬性不添加逗號。屬性名稱也可以用字串。在多個選擇性參數的情況下,對必須值使用具名引數,而使用對象字面量來封裝多個選擇性參數。
使用方式:一般來說都是點標記法,也可以方括弧標記法,把訪問的屬性以字串寫在方括弧中。
方括弧的主要優點是可以通過變數來訪問屬性:
1 var propertyName = "name";2 alert(person[propertyName]); //"Annika"
如果屬性名稱中包含會導致語法錯誤的字元,或者屬性名稱用的是關鍵字或保留字,也可以使用方括弧標記法:
person["first name"]="Annika"; //屬性名稱中可以包含非字母非數字
Array類型:
ECMAScript與其他語言的不同之處在於它可以儲存任何類型的資料。
建立數組的方法:
1.Array建構函式
1 var colors = new Array(3); //建立一個包含3項的數組2 var names = new Array("Annika"); //建立一個一項的,即字串“Annika”的數組
2.數組字面量標記法
1 var colors = ["red","blue"];
數組的length屬性的特別之處——可以通過設定這個屬性,從數組末尾移除項或者添加新項。
檢測某個對象是不是數組的方法:Array.isArray();
轉換方法:(預設情況下以逗號分隔,用join()方法,可以接受一個分隔字元作為參數)
- toLocaleString(),
- toString(),返回數組中每個值得字串形式
- valueOf(),返回數組本身
棧方法:
棧是一種LIFO(Last-in-first-out)後進先出的資料結構,棧中項的插入和移除都發生在棧頂部。ECMAScript中為數組提供了兩種方法:
push():傳入任意參數,逐個添加到數組末尾,並返回修改後的數組長度。
pop():從數組末尾移除最後一項,減少length數,並返回移除的項。
隊列方法:
隊列是一種FIFI(First-in-first-out)先進先出的資料結構,隊列在末尾添加項,在列表的前端移除項,有兩種新方法:
shift():移除數組的第一項,並返回該項。
unshift():從數組前端推進任意項,並返回數組長度。
重排序方法:
reverse():反轉數組順序。
sort():預設按升序排列數組項,會調用每個數組的toString()方法,比較得到字串,所以可以得到意料之外的答案。
1 var values = [0, 1, 5, 10, 15];2 values.sort();3 alert(values); //0,1,10,15,5
所以最好給sort添加一個參數:
1 function compare(value1,value2){2 if (value1<value2){3 return -1;4 } else if (value1 < value2){5 return 1;6 } else {7 return 0;8 }9 }
1 values.sort(compare);2 alert(values); //0,1,5,10,15
操作方法:
cancat():建立當前數組一個副本,將接收到的參數添加到副本末尾,返回新構建的數組
slice():不改變原來的數組,可以接受一到兩個參數,只有一個參數就返回從該參數到末尾的所有項,如果是兩個,就返回起始和結束位置之間的項,如果參數為負數,就加上數組長度再調用,如果結束位置小於起始位置,則返回空數組。
splice():會改變原來的數組,始終返回被刪除的項。
- 刪除:只需指定兩個參數,要刪除的第一項和要刪除的項數。
- 插入:只需提供3個參數,起始位置,0(要刪除的項數)和要插入的項,可以插入多項。
- 替換:指定的參數與插入相同,只不過0可以改成要刪除的項數。
位置方法:
共有兩個位置方法:
indexOf():從數組開頭
lastIndexOf():從數組末尾
都接受兩個參數,要尋找的項和要尋找的起點位置索引(可選),沒找到就返回-1,在比較過程中使用全等操作符。
迭代方法:
共有5個迭代方法,每個方法接受兩個參數:要在每一項上啟動並執行函數和運行該函數的範圍對象——影響this的值,其中傳入函數的參數有三個,數組項的值、該項在數組中的位置和數組對象本身。
every():對數組中的每一項運行給定函數,如果該函數對每一項都返回true,則返回true。
1 var numbers = [1,2,3,4,5,4,3,2,1]2 3 var everyResult = numbers.every(function(item,index,array){4 return (item>2);5 });6 7 alert(everyResult); //false
filter():對數組中的每一項運行給定函數,返回該函數會返回true。
1 var everyResult = numbers.filter(function(item,index,array){2 return (item>2);3 });4 5 alert(everyResult); //[3,4,5,4,3]
forEach():對數組每一項運行指定函數,該方法沒有傳回值。
1 numbers.forEach(function(item,index,array){2 alert(item*2);3 }); //2,4,6,8,10,8,6,4,2
map():對數組中的每一項運行給定的函數,返回每次函數調用的結果組成的數組。
1 var mapResult = numbers.map(function(item,index,array){2 return item*2;3 });4 alert(mapResult); //[ 2, 4, 6, 8, 10, 8, 6, 4, 2 ]
some():對數組中的每一項運行指定的函數,如果該函數對任一項返回true,則返回true。
1 var someResult = numbers.some(function(item,index,array){2 return (item>2);3 });4 console.log(someResult); //true
歸併方法:
ECMAScript新增了兩個歸併數組的方法,這兩個方法會迭代數組的所有項,然後構建一個最終的傳回值。
reduce():從數組的第一項開始,逐個遍曆到最後,接受兩個參數,一個在每一項上調用的函數和作為歸併基礎的初始值,其中函數接受4個參數,前一個值,當前值,項的索引和數組對象。這個函數的任何傳回值都會作為第一個參數自動傳給下一項。
1 var numbers = [1,2,3,4,5,4,3,2,1]2 3 var Result = numbers.reduce(function(prev,cur,index,array){4 return prev+cur;5 });6 console.log(Result); //25
reduceRight():與reduce相同,只是遍曆開始的方向不同。
JavaScript進階程式設計學習筆記2