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