計算5名同學的平均分
<script>
var a1,a2,a3,a4,a5;
a1 =Number(prompt("請輸入分數"));
a2 =Number(prompt("請輸入分數"));
a3 =Number(prompt("請輸入分數"));
a4 =Number(prompt("請輸入分數"));
a5 =Number(prompt("請輸入分數"));
var ave
= (a1+a2+a3+a4+a5)/
5;
alert(ave);
</script>
這個程序很簡單,但是如果是100人呢,難道要真的要複製100遍?
怎麼解決?顯然需要使用循環。
但是嘗試一下就會發現,循環使用不上,因爲無法去控制變量a1,a2,也就是無法將循環控制變量和變量a1、a2聯繫起來。
var a
= [];
var sum=
0;
for(var
i=0; i<5;
i++){
a[i] = Number(prompt("請輸入分數"));
sum += a[i];
}
var ave= sum/
a.length
alert(ave);
這段代碼能夠實現同樣的功能,而且如果是100人的話,只要把循環的條件改爲i<100即可,整個程序的結構和代碼量和人數多少沒有關係。
爲什麼和人數沒有關係?因爲和循環結合起來了。
爲什麼能和循環結合起來呢? 因爲我們把變量的表示方式改變了,即名稱+序號的方式(a[0]、a[1]……),那麼序號是可以用循環變量去控制。
數組的定義與元素訪問
怎麼用呢?
定義有三種方式“”
(1)var a = [];
(2) var a = new Array();
(3) var a = [0,0,0];
訪問元素:數組名+下標
a[0] a[3]
需要注意的是下標從0開始。
所以在使用的時候需要注意越界問題,比如5個元素的數組,那麼它的下標範圍爲[0,4],不包括5,5已經越界了。
數組的本質:一組變量的集合,或者說是一組內存單元。只不過對於變量的表示方式使用的是數組名+下標的方式。
數組的常用屬性和方法:
數組的屬性:
length:
1).告訴我們數組的長度:數組名.length
2).通過該屬性可以改變數組的長度
數組的常用方法:
(1)unshift:在數組的頭部添加元素,返回值返回的是新數組的長度。
shift:刪除數組頭部的元素,返回值是刪除的頭部元素。
(2)indexOf:查找在數組中重複出現的元素第一次出現的位置,返回值是該元素的下標。
lastIndexOf:查找數組中重複出現的元素最後一次出現的位置,返回值是該元素的下標。
(3)push:在數組的尾部插入元素,返回值是添加元素後數組的長度。
pop:從數組的尾部刪除最後一個元素,返回值是刪除的元素。
(4)slice(開始位置的下標,結束位置的下標):提取數組中指定連續的子數組。前包括,後不包括。
(5)splice(開始刪除位置的下標,要刪除元素的長度,要選擇插入或替換的內容),splice有“剪接”的含義。前面兩個參數定義“剪”的部分,第三個參數定義“接”的部分,經過不同的參數組合就可以實現以下三個功能:
①刪除操作:刪除數組中指定的任意元素
②插入操作:在數組中指定位置插入元素
③替換操作:在數組中替換指定位置的元素。
(6)reverse:將數組中的元素,反序輸出。在原數組的基礎上進行反序輸出,不會重新創建新數組。
(7)map:原數組的映射,經過函數的加工,返回給一個新數組。
一般我們傳遞的參數都是數值、字符串等類型的數據,有些時候可能需要傳遞一個函數,那麼如何去傳遞一個函數呢?
var a
= [2,4,6,8];
var b
=a.map(fun);
function fun
(value, index, self) {
return value*value;
}
我們可以將以上內容簡寫爲:
var a
= [2,4,6,8];
var b
=a.map(function
(value, index, self) {
return value*value;
});
這就是匿名函數