4、JavaScript進階篇①——基礎語法

陳爸比發表於2018-05-08
 

一、認識JS

你知道嗎,Web前端開發師需要掌握什麼技術?也許你已經瞭解HTML標記(也稱為結構),知道了CSS樣式(也稱為表示),會使用HTML+CSS建立一個漂亮的頁面,但這還不夠,它只是靜態頁面而已。我們還需使用JavaScript增加行為,為網頁新增動態效果。準備好,讓JavaScript帶你進入新境界吧!

JavaScript能做什麼?

1.增強頁面動態效果(如:下拉選單、圖片輪播、資訊滾動等)

2.實現頁面與使用者之間的實時、動態互動(如:使用者註冊、登陸驗證等)

JS進階篇學習什麼?

JavaScript入門篇中,我們學習瞭如何插入JS、輸出內容及簡單的DOM操作,JavaScript進階篇讓您進一步的瞭解JS的變數、陣列、函式、語法、物件、事件、DOM操作,製作簡單的網頁動態效果。

注意:

1. JS是區分大小寫的,如:classname和ClassName是不一樣的。同時注意方法、屬性、變數等的大小寫吆。

2. JS中的字元、符號等一定要在英文狀態下輸入吆。
 

二、什麼是變數

什麼是變數? 從字面上看,變數是可變的量;從程式設計角度講,變數是用於儲存某種/某些數值的儲存器。我們可以把變數看做一個盒子,盒子用來存放物品,物品可以是衣服、玩具、水果…等。

1. 給變數取個名字(變數命名)

我們為了區分盒子,可以用BOX1,BOX2等名稱代表不同盒子,BOX1就是盒子的名字(也就是變數的名字)。

我們趕快給變數取個好名字吧!變數名字可以任意取,只不過取名字要遵循一些規則:

1.必須以字母、下劃線或美元符號開頭,後面可以跟字母、下劃線、美元符號和數字。如下:

正確:           
    mysum            
    _mychar         
    $numa1          
錯誤:
  6num  //開頭不能用數字
  %sum //開頭不能用除(_ $)外特殊符號,如(%  + /等)
  sum+num //開頭中間不能使用除(_ $)外特殊符號,如(%  + /等)

2.變數名區分大小寫,如:A與a是兩個不同變數。

3.不允許使用JavaScript關鍵字和保留字做變數名。

2. 變數宣告

我們要使用盒子裝東西,是不是先要找到盒子,那在程式設計中,這個過程叫宣告變數,找盒子的動作,如何表示:

宣告變數語法: var 變數名;    

var就相當於找盒子的動作,在JavaScript中是關鍵字(即保留字),這個關鍵字的作用是宣告變數,併為”變數”準備位置(即記憶體)。

var mynum ; //宣告一個變數mynum

當然,我們可以一次找一個盒子,也可以一次找多個盒子,所以Var還可以一次宣告多個變數,變數之間用”,”逗號隔開。

var num1,mun2 ; //宣告一個變數num1

注意:變數也可以不宣告,直接使用,但為了規範,需要先宣告,後使用。

3. 變數賦值

我們可以把變數看做一個盒子,盒子用來存放物品,那如何在變數中儲存內容呢?

我們使用"="號給變數儲存內容,看下面的語句:

var mynum = 5 ; //宣告變數mynum並賦值。

這個語句怎麼讀呢? 給變數mynum賦值,值為5。我們也可以這樣寫:

var mynum; //宣告變數mynum
mynum = 5 ; //給變數mynum賦值

注:這裡 "="號的作用是給變數賦值,不是等於號。

盒子可以裝衣服、玩具、水果…等。其實,變數是無所不能的容器,你可以把任何東西儲存在變數裡,如數值、字串、布林值等,例如:

var num1 = 123;       // 123是數值
var num2 = "一二三";    //"一二三"是字串
var num3=true;    //布林值true(真),false(假)

其中,num1變數儲存的內容是數值;num2變數儲存的內容是字串,字串需要用一對引號""括起來,num3變數儲存的內容是布林值(true、false)。

三、表示式

表示式與數學中的定義相似,表示式是指具有一定的值、用操作符把常數和變數連線起來的代數式。一個表示式可以包含常數或變數。

我們先看看下面的JavaScript語句:

生活中“再見”表達方法很多,如:英語(goodbye)、網路語(88)、肢體語(揮揮手)等。在JavaScript表示式無處不在,所以一定要知道可以表達哪些內容,看看下面幾種情況:

注意:串表示式中mychar是變數

注意:數值表示式中num是變數

注意:布林表示式中num是變數

四、操作符

1. +號操作符

操作符是用於在JavaScript中指定一定動作的符號。

(1)操作符

看下面這段JavaScript程式碼。

sum = numa + numb;

其中的"=""+"都是操作符。

JavaScript中還有很多這樣的操作符,例如,算術操作符(+、-、*、/等),比較操作符(<、>、>=、<=等),邏輯操作符(&&、||、!)。

注意: “=” 操作符是賦值,不是等於。

(2) "+"操作符

算術運算子主要用來完成類似加減乘除的工作,在JavaScript中,“+”不只代表加法,還可以連線兩個字串,例如:

mystring = "Java" + "Script"; // mystring的值“JavaScript”這個字串

 2. 自加一,自減一 ( ++和- -)

算術操作符除了(+、-、*、/)外,還有兩個非常常用的操作符,自加一“++”;自減一“--”。首先來看一個例子:

mynum = 10;
mynum++; //mynum的值變為11
mynum--; //mynum的值又變回10

上面的例子中,mynum++使mynum值在原基礎上增加1,mynum–使mynum在原基礎上減去1,其實也可以寫成:

mynum = mynum + 1;//等同於mynum++
mynum = mynum - 1;//等同於mynum--

 3. 比較操作符

我們先來做道數學題,數學考試成績中,小明考了90分,小紅考了95分,問誰考的分數高?
答: 因為“95 > 90”,所以小紅考試成績高。

其中大於號”>” 就是比較操作符,小紅考試成績和小明考試成績就是運算元,並且是兩個運算元。

也就是說兩個運算元通過比較操作符進行比較,得到值為真(true)和假(false)。

在JavaScript中,這樣的比較操作符有很多,這些操作符的含義如下: 

看看下面例子:

var a = 5;//定義a變數,賦值為5
var b = 9; //定義b變數,賦值為9
document.write (a<b); //a小於b的值嗎? 結果是真(true)
document.write (a>=b); //a大於或等於b的值嗎? 結果是假(false)
document.write (a!=b); //a不等於b的值嗎? 結果是真(true)
document.write (a==b); //a等於b的值嗎? 結果是假(false)

4. 邏輯與操作符

數學裡面的“a>b”,在JavaScript中還表示為a>b;數學中的“b大於a,b小於c”是“a<b<c”,那麼在JavaScript中可以用&&表示,如下:

b>a && b<c    //“&&”是並且的意思, 讀法"b大於a"並且" b小於c "

好比我們參加高考時,在進入考場前,必須出示准考證和身份證,兩者缺一不可,否則不能參加考試,表示如下:

if(有準考證 &&有身份證) 
{
   進行考場考試
}

 “&&”是邏輯與操作符,只有“&&”兩邊值同時滿足(同時為真),整個表示式值才為真。

邏輯與操作符值表:

注意: 如果A為假,A && B為假,不會在執行B; 反之,如果A為真,要由 B 的值來決定 A && B 的值。

5.邏輯或操作符

"||"邏輯或操作符,相當於生活中的“或者”,當兩個條件中有任一個條件滿足,“邏輯或”的運算結果就為“真”。

例如:本週我們計劃出遊,可是週一至週五工作,所以週六或者週日哪天去都可以。即兩天中只要有一天有空,就可以出遊了。

var a=3;
var b=5;
var c;
c=b>a ||a>b;  //b>a是true,a>b是false,c是true

邏輯或操作符值表:

注意: 如果A為真,A || B為真,不會在執行B; 反之,如果A為假,要由 B 的值來決定 A || B 的值。

6. 邏輯非操作符

"!"是邏輯非操作符,也就是”不是”的意思,非真即假,非假即真。好比小華今天買了一個杯子,小明說:”杯子是白色的”,小亮說:“杯子是紅色的”,小華說:”小明說的不是真話,小亮說的不是假話“。猜猜小華買的什麼顏色的杯子,答案:紅色杯子。

邏輯非操作符值表:

看下面程式碼,變數c的值是什麼:

var a=3;
var b=5;
var c;
c=!(b>a);  // b>a值是true,! (b>a)值是false
c=!(b<a);  // b<a值是false, ! (b<a)值是true

7. 操作符優先順序

我們都知道,除法、乘法等操作符的優先順序比加法和減法高,例如:

var numa=3;
var numb=6
jq= numa + 30 / 2 - numb * 3;  // 結果為0

如果我們要改變運算順序,需新增括號的方法來改變優先順序:

var numa=3;
var numb=6
jq= ((numa + 30) / (2 - numb)) * 3; //結果是-24.75

操作符之間的優先順序(高到低):

算術操作符 → 比較操作符 → 邏輯操作符 → “=”賦值符號

如果同級的運算是按從左到右次序進行,多層括號由裡向外。

var numa=3;
var numb=6;
jq= numa + 30 >10 && numb * 3<2;  //結果為false

五、陣列

 我們知道變數用來儲存資料,一個變數只能儲存一個內容。假設你想儲存10個人的姓名或者儲存20個人的數學成績,就需要10個或20個變數來儲存,如果需要儲存更多資料,那就會變的更麻煩。我們用陣列解決問題,一個陣列變數可以存放多個資料。好比一個團,團裡有很多人,如下我們使用陣列儲存5個學生成績。

陣列是一個值的集合,每個值都有一個索引號,從0開始,每個索引都有一個相應的值,根據需要新增更多數值。

示例程式碼:

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>什麼是陣列</title>
 6 <script type="text/javascript">
 7  var myarr=new Array(); //定義陣列
 8  myarr[0]=80; 
 9  myarr[1]=60;
10  myarr[2]=99;
11  document.write("第一個人的成績是:"+myarr[0]);
12  document.write("第二個人的成績是:"+myarr[1]);
13  document.write("第三個人的成績是:"+myarr[2]);
14 </script>
15 </head>
16 <body>
17  </html>

1. 如何建立陣列

使用陣列之前首先要建立,而且需要把陣列本身賦至一個變數。好比我們出遊,要組團,並給團定個名字“雲南之旅”。

建立陣列語法:

var myarray=new Array();

 我們建立陣列的同時,還可以為陣列指定長度,長度可任意指定。

var myarray= new Array(8); //建立陣列,儲存8個資料。 

注意:
1.建立的新陣列是空陣列,沒有值,如輸出,則顯示undefined。
2.雖然建立陣列時,指定了長度,但實際上陣列都是變長的,也就是說即使指定了長度為8,仍然可以將元素儲存在規定長度以外。

程式碼示例:

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>建立陣列</title>
 6 <script type="text/JavaScript">
 7 var myarr=new Array();
 8  document.write("陣列的第一個值:"+myarr[0]);
 9 </script>
10 </head>
11 <body>
12 </body>
13 </html>

結果:

陣列的第一個值:undefined

2. 陣列賦值

陣列建立好,接下來我們為陣列賦值。我們把陣列看似旅遊團的大巴車,大巴車裡有很多位置,每個位置都有一個號碼,顧客要坐在哪個位置呢? 

第一步:組個大巴車
第二步:按票對號入座
        大巴車的1號座位是張三
        大巴車的2號座位是李四

陣列的表達方式:

第一步:建立陣列var myarr=new Array(); 
第二步:給陣列賦值
        myarr[1]=" 張三";
        myarr[2]=" 李四";

下面建立一個陣列,用於儲存5個人的數學成績。

var myarray=new Array(); //建立一個新的空陣列
myarray[0]=66; //儲存第1個人的成績
myarray[1]=80; //儲存第2個人的成績
myarray[2]=90; //儲存第3個人的成績
myarray[3]=77; //儲存第4個人的成績
myarray[4]=59; //儲存第5個人的成績

注意:陣列每個值有一個索引號,從0開始。

我們還可以用簡單的方法建立上面的陣列和賦值:

第一種方法:

var myarray = new Array(66,80,90,77,59);//建立陣列同時賦值

第二種方法:

 var myarray = [66,80,90,77,59];//直接輸入一個陣列(稱 “字面量陣列”)

注意:陣列儲存的資料可以是任何型別(數字、字元、布林值等)

 3. 向陣列新增一個新元素

上一節中,我們使用myarray變數儲存了5個人的成績,現在多出一個人的成績,如何儲存呢? 

只需使用下一個未用的索引,任何時刻可以不斷向陣列增加新元素。

myarray[5]=88; //使用一個新索引,為陣列增加一個新元素

4. 使用陣列元素

我們知道陣列中的每個值有一個索引號,從0開始,如下圖, myarray變數儲存6個人的成績:

要得到一個陣列元素的值,只需引用陣列變數並提供一個索引,如:
第一個人的成績表示方法:myarray[0]
第三個人的成績表示方法: myarray[2]

5. 陣列屬性length

如果我們想知道陣列的大小,只需引用陣列的一個屬性length。Length屬性表示陣列的長度,即陣列中元素的個數。

語法:

myarray.length; //獲得陣列myarray的長度

注意:因為陣列的索引總是由0開始,所以一個陣列的上下限分別是:0和length-1。如陣列的長度是5,陣列的上下限分別是0和4。

var arr=[55,32,5,90,60,98,76,54];//包含8個數值的陣列arr 
document.write(arr.length); //顯示陣列長度8
document.write(arr[7]); //顯示第8個元素的值54

同時,JavaScript陣列的length屬性是可變的,這一點需要特別注意。

arr.length=10; //增大陣列的長度
document.write(arr.length); //陣列長度已經變為10

陣列隨元素的增加,長度也會改變,如下:

var arr=[98,76,54,56,76]; // 包含5個數值的陣列
document.write(arr.length); //顯示陣列的長度5
arr[15]=34;  //增加元素,使用索引為15,賦值為34
alert(arr.length); //顯示陣列的長度16
 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>陣列長度</title>
 6 <script language="javascript">
 7   var mynum=new Array(65,90,88,98);
 8  document.write("陣列的長度是:"+  mynum.length );
 9 </script>
10 </head>
11 <body>
12 </body>
13 </html>

六、二維陣列

一維陣列,我們看成一組盒子,每個盒子只能放一個內容。

一維陣列的表示: myarray[ ]

二維陣列,我們看成一組盒子,不過每個盒子裡還可以放多個盒子。

二維陣列的表示: myarray[ ][ ]

注意: 二維陣列的兩個維度的索引值也是從0開始,兩個維度的最後一個索引值為長度-1。 

1. 二維陣列的定義方法一

var myarr=new Array();  //先宣告一維 
for(var i=0;i<2;i++){   //一維長度為2
   myarr[i]=new Array();  //再宣告二維 
   for(var j=0;j<3;j++){   //二維長度為3
   myarr[i][j]=i+j;   // 賦值,每個陣列元素的值為i+j
   }
 }

將上面二維陣列,用表格的方式表示:

2. 二維陣列的定義方法二

var Myarr = [[0 , 1 , 2 ],[1 , 2 , 3, ]]

3. 賦值

myarr[0][1]=5; //將5的值傳入到陣列中,覆蓋原有值。

說明: myarr[0][1] ,0 表示表的行,1表示表的列。

七、流程控制語句

1. if語句

if語句是基於條件成立才執行相應程式碼時使用的語句。

語法:

if(條件)
{ 條件成立時執行程式碼}

注意:if小寫,大寫字母(IF)會出錯!

假設你應聘web前端技術開發崗位,如果你會HTML技術,你面試成功,歡迎加入公司。程式碼表示如下:

<script type="text/javascript">
  var mycarrer = "HTML";
  if (mycarrer == "HTML")
  {
    document.write("你面試成功,歡迎加入公司。");
  }
</script>

2. if…else語句(二選一)

if…else語句是在指定的條件成立時執行程式碼,在條件不成立時執行else後的程式碼。

語法:

if(條件)
{ 條件成立時執行的程式碼}
else
{條件不成立時執行的程式碼}

假設你應聘web前端技術開發崗位,如果你會HTML技術,你面試成功,歡迎加入公司,否則你面試不成功,不能加入公司。

程式碼表示如下:

<script type="text/javascript">
  var mycarrer = "HTML"; //mycarrer變數儲存技能
  if (mycarrer == "HTML")
    { document.write("你面試成功,歡迎加入公司。");  }
  else  //否則,技能不是HTML
    { document.write("你面試不成功,不能加入公司。");}
</script>

3. if…else巢狀語句(多重判斷)

要在多組語句中選擇一組來執行,使用if..else巢狀語句。

語法:

if(條件1)
{ 條件1成立時執行的程式碼}
else  if(條件2)
{ 條件2成立時執行的程式碼}
...
else  if(條件n)
{ 條件n成立時執行的程式碼}
else
{ 條件1、2至n不成立時執行的程式碼}

假設數學考試,小明考了86分,給他做個評價,60分以下的不及格,60(包含60分)-75分為良好,75(包含75分)-85分為很好,85(包含75分)-100優秀。

程式碼表示如下:

結果:

 4. Switch語句(多種選擇)

當有很多種選項的時候,switch比if else使用更方便。

語法:

switch(表示式)
{
case值1:
  執行程式碼塊 1
  break;
case值2:
  執行程式碼塊 2
  break;
...
case值n:
  執行程式碼塊 n
  break;
default:
  與 case值1 、 case值2...case值n 不同時執行的程式碼
}

語法說明:

Switch必須賦初始值,值與每個case值匹配。滿足執行該 case 後的所有語句,並用break語句來阻止執行下一個case。如所有case值都不匹配,執行default後的語句。

假設評價學生的考試成績,10分滿分制,我們按照每一分一個等級將成績分等,並根據成績的等級做出不同的評價。

程式碼如下:

執行結果:

評語: 及格,加油!

注意:記得在case所執行的語句後新增上一個break語句。否則就直接繼續執行下面的case中的語句,看以下程式碼:

執行結果:

評語: 繼續努力!
評語: 及格,加油!
評語: 湊合,奮進
評語: 很棒,很棒
評語: 高手,大牛

在上面的程式碼中,沒有break停止語句,如果成績是4分,則case 5後面的語句將會得到執行,同樣,case6、7-10後面的語句都會得到執行。

5. for迴圈

很多事情不只是做一次,要重複做。如列印10份試卷,每次列印一份,重複這個動作,直到列印完成。這些事情,我們使用迴圈語句來完成,迴圈語句,就是重複執行一段程式碼。

for語句結構:

for(初始化變數;迴圈條件;迴圈迭代)
{     
    迴圈語句 
 }

假如,一個盒子裡有6個球,我們每次取一個,重複從盒中取出球,直到球取完為止。

<script type="text/javascript">
var num=1;
for (num=1;num<=6;num++)  //初始化值;迴圈條件;迴圈後條件值更新
{   document.write("取出第"+num+"個球<br />");
}
</script>

結果:

 

執行思路:

6. while迴圈

和for迴圈有相同功能的還有while迴圈, while迴圈重複執行一段程式碼,直到某個條件不再滿足。

while語句結構:

while(判斷條件)
{
    迴圈語句
 }

使用while迴圈,完成從盒子裡取球的動作,每次取一個,共6個球。

<script type="text/javascript">
var num=0;  //初始化值
while (num<=6)   //條件判斷
{
  document.write("取出第"+num+"個球<br />");
  num=num+1;  //條件值更新
}
</script>

7. Do…while迴圈

do while結構的基本原理和while結構是基本相同的,但是它保證迴圈體至少被執行一次。因為它是先執行程式碼,後判斷條件,如果條件為真,繼續迴圈。

do…while語句結構:

do
{
    迴圈語句
 }
while(判斷條件)

我們試著輸出5個數字。

<script type="text/javascript">
   num= 1;
   do
   {
     document.write("數值為:" +  num+"<br />");
     num++; //更新條件
   }
   while (num<=5)
</script>

執行結果:

為什麼呢?我們來看下執行思路:

8. 退出迴圈break

在while、for、do…while、while迴圈中使用break語句退出當前迴圈,直接執行後面的程式碼。

格式如下:

for(初始條件;判斷條件;迴圈後條件值更新)
{
  if(特殊情況)
  {break;}
  迴圈程式碼
}

當遇到特殊情況的時候,迴圈就會立即結束。看看下面的例子,輸出10個數,如果數值為5,就停止輸出。

執行結果:

注:當num=5的時候迴圈就會結束,不會輸出後面迴圈的內容。

9. 繼續迴圈continue

continue的作用是僅僅跳過本次迴圈,而整個迴圈體繼續執行。

語句結構:

for(初始條件;判斷條件;迴圈後條件值更新)
{
  if(特殊情況)
  { continue; }
 迴圈程式碼
}

上面的迴圈中,當特殊情況發生的時候,本次迴圈將被跳過,而後續的迴圈則不會受到影響。好比輸出10個數字,如果數字為5就不輸出了。

 

執行結果:

注:上面的程式碼中,num=5的那次迴圈將被跳過。

 程式碼練習:

在一個大學的程式設計選修課班裡,我們得到了一組參加該班級的學生資料,分別是姓名、性別、年齡和年級,接下來呢,我們要利用JavaScript的知識挑出其中所有是大一的女生的的名字哦。

學生資訊如下:

    (`小A`,`女`,21,`大一`),  (`小B`,`男`,23,`大三`),

    (`小C`,`男`,24,`大四`),  (`小D`,`女`,21,`大一`),

    (`小E`,`女`,22,`大四`),  (`小F`,`男`,21,`大一`),

    (`小G`,`女`,22,`大二`),  (`小H`,`女`,20,`大三`),

    (`小I`,`女`,20,`大一`),  (`小J`,`男`,20,`大三`)

任務

第一步: 把這些資料組成一個陣列,方便我們之後操作哦。

提示: 使用二維陣列。

第二步: 篩選資料吧,首先找出都是大一的所有資訊 ;

第三步: 最後再一次篩選上一步得到的資料,列印出都是女生的姓名 ;

提示: 可以用switch 或 if 語句進行篩選。
 1 !DOCTYPE  HTML>
 2 <html >
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>流程控制語句</title>
 6 <script type="text/javascript">
 7 
 8  //第一步把之前的資料寫成一個陣列的形式,定義變數為 infos
 9  var infos=[[`小A`,`女`,21,`大一`],
10             [`小B`,`男`,23,`大三`],
11             [`小C`,`男`,24,`大四`],
12             [`小D`,`女`,21,`大一`],
13             [`小E`,`女`,22,`大四`],
14             [`小F`,`男`,21,`大一`],
15             [`小G`,`女`,22,`大二`],
16             [`小H`,`女`,20,`大三`],
17             [`小I`,`女`,20,`大一`],
18             [`小J`,`男`,20,`大三`]
19  ];
20  
21  var b=new Array();
22  var j=0;
23  //第一次篩選,找出都是大一的資訊
24  for(var i=0;i<infos.length;i++){
25     if(infos[i][3]=="大一"){
26         b[j]=infos[i];
27         j++;
28         document.write(infos[i]+"<br/>");
29     }
30 }
31   
32  //第二次篩選,找出都是女生的資訊
33  for(var i=0;i<b.length;i++){
34     if(b[i][1]=="女"){
35         document.write(b[i][0]+"<br/>");
36     }
37 }
38   
39 </script>
40 </head>
41 <body>
42 </body>
43 </html>

相關文章