面我們已經介紹了事件的概念,而響應某個事件的函數就叫做事件處理程序。事件處理程序的名字以 "on" 開頭,因此 click 事件的處理程序就是 onclick ,load 事件的處理程序就是 onload。
某個元素支持的每種事件,都可以使用一個相應事件處理程序同名的 HTML 特性來指定。這個特性的值應該是能夠執行的 JavaScript 代碼。例如,要在按鈕被單擊時執行一些操作,可以像下面代碼一樣:
<input type="button" value="點擊我" onclick="alert('我被點擊了。。')" />
注意,上面這種寫法不能在其中使用未經轉義的 HTML 語法字符,如果要使用 HTML 語法字符,就需要使用轉義字符了。
在 HTML 中定義的事件處理程序可以包含要執行的具體動作,也可以調用在頁面其他地方定義的腳本,例:
HTML 事件處理程序--調用頁面腳本
上面代碼指定事件處理程序具有一些獨到之處。首先,會創建一個封裝著元素屬性值的函數。這個函數中有一個局部變量 event,通過這個 event 變量,可以直接訪問事件對象,你不用自己定義它,也不用從函數的參數列表中讀取。在這個函數內部,this 值等于事件的目標元素。
不過,在 HTML 中指定事件處理程序有兩個缺點。首先,存在一個時差問題,用戶可能在 HTML 元素一出現在頁面上就觸發了相應的事件,但當時的事件處理程序有可能尚不具備執行條件。前面的例子中,假如 showMessage() 函數是在按鈕下方、頁面的最底部定義的。如果用戶在頁面解析 showMessage() 函數之前就單擊了按鈕,就會出現錯誤。因此,很多 HTML 事件處理程序都會被封裝在一個 try-catch 塊中。其次,這樣擴展事件處理程序的作用域鏈在不同瀏覽器中會導致不同結果。不同 JavaScript 引擎遵循的標識符解析規則存在差異,很可能會在訪問非限定對象成員時出錯。
<script src="https://lf3-cdn-tos.bytescm.com/obj/cdn-static-resource/tt_player/tt.player.js?v=20160723"></script>
一、主要學習你內容:
1、常量與變量
2、數據類型
3、運算符
4、表達式與語句
5、類型轉換
6、轉義字符
7、注釋
二、常量與變量
2.1變量
變量指的是一個可以改變的量。
命名規則:
1、變量由字母、下劃線、$或數字組成,并且第一個字母必須是“字母、下劃線或$”
2、變量不能是系統關鍵字和保留字。
3、變量名一定要區分大小寫
變量的使用
1、變量聲明
2、變量賦值
語法:
var 變量名=值; //所有JavaScript的變量都是由var聲明。
var 變量1=值,變量2=值,變量3=值 //可以聲明多個變量名,變量名直接用英文 (,)隔開
舉例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
var a=10;
document.write(a);
</script>
</head>
<body>
</body>
</html>
2.2常量
常量指不能改變的量,一般定義常量的時候,常量名全部大寫,這樣一看就知道是常量了。
如:
var ABC=1
三、數據類型
3.1基本數據類型:
(1)數字: 1 、 -1、2.54等
(2)字符串: "字符內容"
注:可以是單引號,也可以是雙引號,或者單引號嵌套雙引號,或雙引號嵌套單引號,但不能同時出現單引號嵌套單引號,雙引號嵌套雙引號,因為JS判斷不處理哪兩個是一對的。如果數字加上了的單引號,那么也變成了字符串
(3)布爾值:true 和false
用在選擇結構上居多。
(4)未定義值
如果一個變量雖然用var聲明了,但是滅有賦值,此時改變量就是“未定義值”用undefined表示
(5)空值null
舉例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
var a=30,b=20;
if(a<b)
{
document.write('a小于b');
}
else
{
document.write('a大于b')
}
var d;
document.write(d);
</script>
</head>
<body>
</body>
</html>
四、運算符
+ 加 -減 *乘 /除 %求余 ++自增 --自減
舉例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
var a=3,b=5;
var c=a*b;
document.write(c);
</script>
</head>
<body>
</body>
</html>
五、賦值運算符
=等于 += 加等于 -=等于 *= /等于
舉例:var a+=b 等價于 var a=a+b;
舉例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
var a=3,b=5;
a+=b;
document.write(a);
</script>
</head>
<body>
</body>
</html>
六、比較運算符
用于將運算符兩邊的值或者表達式進行比較,如果結果是對的,返回的是true,如果結果是錯的,返回的是false。
> 大于 < 小于 >=大于等于 <=小于等于 ==等于 !=不等于
舉例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
var a=3,b=4;
if(a==b)
{
document.write('a和b的值相等');
}
else
document.write('a和b的值不等');
</script>
</head>
<body>
</body>
</html>
七、邏輯運算符
&& "與"運算 || "或"運算 !"非"運算
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
var a=3,b=4,c=4;
if(a>b||b<c)
{
document.write('結果為真');
}
else
document.write('結果為假');
</script>
</head>
<body>
</body>
</html>
七、條件運算符也叫三目運算符
語法:
var a=條件? 表達式1:表達式2;
舉例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
var result=(2>3)?"表達式1執行":"表達式2執行";
document.write(result);
</script>
</head>
<body>
</body>
</html>
說明:
當條件為true時,我們選擇的是表達式1,當條件為false時,我們選擇的是表達式2.
八、表達式和語句
舉例: var a=3+4;
說明:3和4是操作數,而+是操作符,3+4是表達式,整體的var a=3+4;這個叫語句
我們只需要記住,一個分號一個語句,而表達式就是一句話的一部分。
九、類型轉換
指的是一種數據類型,轉換成另外一種數據類型。
轉換類型有兩種:
1、隱式類型轉換:JS自動進行類型轉換
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
var a="100";
var b=100;
var result=a+b;
document.write(result);
</script>
</head>
<body>
</body>
</html>
結果:是100100而不是200,這種一個數字和一個字符串相加,JS會自動將數字轉換成字符串然后在相加,所以得到的是100100,這種自動進行類型轉換的叫做隱式類型轉換,
2、顯示類型轉換:手動用代碼強制進行類型轉換。
9.1字符串轉換為數字
1)Number() 提取字符串中純數字用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
document.write("Number('222'):"+Number("222")+"<br/>");
document.write("Number('222.123'):"+Number("222.123")+"<br/>");
document.write("Number('fff222'):"+Number("fff222")+"<br/>");
document.write("Number('222fff'):"+Number("222ff")+"<br/>");
</script>
</head>
<body>
</body>
</html>
結果:
說明,Number只能轉換純數字的,帶字母的,顯示NAN,是Not a Number非數字意思。
2)parselnt()提取首字母為數字的整數部分
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
document.write("parseInt('222'):"+parseInt("222")+"<br/>");
document.write("parseInt('222.123'):"+parseInt("222.123")+"<br/>");
document.write("parseInt('fff222'):"+parseInt("fff222")+"<br/>");
document.write("parseInt('222fff'):"+parseInt("222ff")+"<br/>");
</script>
</head>
<body>
</body>
</html>
結果:
說明:parselnt()是從左到右判斷,如果第一個字符是數字,則繼續判斷,直到出現非數字為止,而第一個字符是非數字,則直接返回Nan
3)parseFloat()提取首字母為數字的整數和小數部分
舉例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
document.write("parseFloat('222'):"+parseFloat("222")+"<br/>");
document.write("parseFloat('222.123'):"+parseFloat("222.123")+"<br/>");
document.write("parseFloat('fff222.111'):"+parseFloat("fff222.111")+"<br/>");
document.write("parseFloat('-222.111fff'):"+parseFloat("-222.111ff")+"<br/>");
</script>
</head>
<body>
</body>
</html>
結果:
說明:同parseint,只不過這個帶小數為
9.2數字轉換為字符串
1)與空字符串相加
2)toString()
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
var a=100+"";
var b=100;
var result=a+b;
var result1=a.toString()+100;
document.write(result+"<br/>");
document.write(result1);
</script>
</head>
<body>
</body>
</html>
結果;
說明:實際應用中很少,更多使用隱式型轉換的方式
十、轉義字符
在頁面中我們想顯示特殊的字符,比方說雙引號。那么就要用到轉義字符。
常見的轉義字符
\' 英文單引號
\'' 英文雙引號
\n 換行符
換行符使用的兩種情況。
1.如果是在document.write()中換行,則應該用:<br/>
2.如果是在alert()中換行,則應該用:\n
舉例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
document.write("細節<br/>\"決定\"<br/>成敗");
alert("細節\n\"決定\"\n成敗")
</script>
</head>
<body>
</body>
</html>
十一、注釋
1.單行注釋
語法:
//單行注釋
2.多行注釋
當注釋的內容比較多,用一行表達不出來時,我們可以使用多行注釋的方式。
語法:
/* 多行注釋 */
.1.字符串
C語言的字符串是一種組合類型,它的結構類似列表,C語言規定字符串要由數值0結束。常見的字符串由char構成,也有unsigned char與其它類型構成的字符串。
通過之前的學習我們知道,字符串常量以英文符號雙引號“"”作為開始結束標志。那么就會存在一個問題,如果字符串的長度太長怎么辦?C語言規定反斜杠“\”作為代碼的續行符,在每行代碼的末尾,代表下面的一行代碼緊接在本行之后,相當于是同一行。
除此之外,還可以用雙引號來處理續行,可以對比一下差別。
后者的排版效果明顯要優于前者。
第三個例子中,下面左邊的那段空白字符也會被當作字符串的一部分,這樣寫是不對的。
這兩種方式都支持多行代碼的續行。
4.2.編碼風格
既然提到了代碼的排版編輯,那就順便討論一下編碼風格。
一些比較嚴謹的團隊會專門制作編碼風格約定,保證所有成員產出風格一致的代碼。
我們的示例代碼都做了縮進處理,這樣做的好處是突出代碼的層次感,比較容易看出邏輯關系。一般語句塊要做縮進處理,下一層的代碼向右縮進4個空格的位置,縮進位置可以在編輯工具里設置。
除此之外,標識符的命名規范是編碼風格的重點。命名的原則之一是顧名思義,名字不能太短。但也有例外,C語言有個不成文規定,整型的循環變量一般命名為i、j、k等。一般如果變量只是作用于小范圍之內,不一定要嚴格遵守,但是如果變量跨越成百上千行還需要引用,再采用i、j、k這樣的變量名就不合適了。
之前還沒提到注釋這方面,這里就順便介紹一個有關代碼的注釋。C語言的代碼注釋有兩種格式,一種是多行注釋(注釋塊,以符號“/*”開始,符號“*/”結束),一種是單行注釋(在一行代碼之后以兩個正斜杠“//”開始注釋)。
注釋的主要作用是幫助理解代碼的可讀性,讓代碼閱讀者更容易理解作者編寫代碼的思路和意圖。
C語言的語句塊有兩種風格。
一般來說,程序員比較認可第二種風格,也更普遍一些。第一種風格主要是排版更加緊湊一點,在文章里面展示更合適一些。
4.3.字符型
單字節字符串里面,以ASCII字符最為常用。我們知道char類型可表示-128~127區間的整數,其中ASCII字符以0~127區間為主,里面包括52個大小寫英文字母、10個阿拉伯數字和各種標點符號,此外還有若干不可見字符。
反斜杠“\”可以作為轉義字符,用來表示不可見字符和其它字符。不可見字符里面比較常用的有空白符、制表符'\t'、回車符'\r'與換行符'\n',由于反斜杠的作用,所以用兩個反斜杠'\'表示反斜杠本身。其中回車符是指光標回到本行的行首,換行是指光標移到下一行,但橫向位置不變。但是現在一般沒分這么仔細,一般地微軟公司軟件常用回車符加換行符來另起一個新行,其它系統就只用一個換行符起新行。
之前的printf輸出字符串,多數都帶有換行符,這樣在輸出一行之后,光標就移動到下一行。有時需要在同一行連續輸出字符,就不能加換行符。scanf輸入格式盡量不要用這些字符。
ASCII字符有很多應用,比如現在常見的html與json,熟悉這些字符可以提高工作效率。
4.4.格式串
前面示例代碼中的主要是printf/scanf的格式串,格式串的用法很多樣,不容易一下子掌握,要靠日常積累。
目前常用的有字符'%c'、整數'%d'、浮點數'%f'與雙精度'%lf',還有字符串'%s'。如果要輸出百分號'%'怎么辦?對了,是兩個百分號'%%'。
輸出格式串還可以指定寬度,比如'%2d',如果整數超過2位數字,就按照原本的長度完整顯示出來。浮點數可以指定有效數字與小數位數,比如'%8.2f'。
輸出格式串還可以指定填充字符,比如'%02d',前面用阿拉伯數字0來填充,還可以用'%.6d'格式。
編譯代碼,運行程序。
輸入格式串還可以跳過一個數值,比如'%*d',在輸入時候遇到一個整數,舍去它的值,如果預期的整數沒出現,函數返回相應的信息。
4.5.返回值
一般的教程中,很少會提到printf/scanf的返回值,但其實它們的返回值非常重要。其中,printf的返回值會告訴我們輸出了多少個字符,而scanf的返回值會告訴我們總共讀取到多少個變量值。
在“cex006.c”文件中輸入以下代碼并保存。
在這個程序中,我們先把重置3個變量,以便觀察之后的輸入是否生效。輸入變量之后將顯示scanf的返回值,接著輸出變量的值。注意對比第9、11行代碼,由于后者忽略了中間一個字符,因此參數里面就少了ch變量。
編譯代碼,運行程序。
第一段輸入,顯示讀取到3個變量,得到的數值也跟初始值不同,說明輸入時正常的。第二段的輸入由于限定了'%*c'格式,因此中間那個字符被忽略了,最后得到2個變量。
再次運行程序,這次輸入不合理的數值,檢查運行結果有什么不一樣。
這次輸入的數值,在后面的部分出現不是數字的字符,由于限定了'%d'格式,因此只讀到中間的字符部分。之后的輸出也可以看出來,變量inum2數值沒有還是之前重置的0。
對于上一節的四則運算小程序,我們用新掌握到的方法進一步完善一下。
在“cex007.c”文件中輸入以下代碼并保存。
在第8行,對scanf的返回值做出判斷,如果不足3個,程序提前退出。后面部分不做調整,下面列出完整的代碼。
完善之后的程序能夠檢測輸入的數值是否正常,對于不正常的數值不再繼續往下運行,從而避免得出錯誤的結果。日常我們寫程序也要養成這樣的習慣,要對一些可能出錯的情況做出預判,避免一些不必要的BUG。
本節的內容一些教程中都沒有提供,這些知識點在實踐中很有用。初學者在掌握C語言基本語法之后,要留意積累常用的知識點。后文也會根據進度需要適當提供一些編程技巧與實踐經驗,相信能達到很好的效果。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。