多重條件判斷語句
- if語句
語法:
if(條件表達(dá)式){
語句...
}else if(條件表達(dá)式){
語句...
}else if(條件表達(dá)式){
語句...
}else{
語句...
}
if...else if...else
當(dāng)該語句執(zhí)行時,會從上到下依次對條件表達(dá)式進(jìn)行求值判斷
如果值為true,則執(zhí)行當(dāng)前語句。
如果值為false,則繼續(xù)向下判斷。
如果所有的條件都不滿足,則執(zhí)行最后一個else后的語句
該語句中,只會有一個代碼塊被執(zhí)行,一旦代碼塊執(zhí)行了,則直接結(jié)束語句
var today = 4;
if(today == 1){
alert('語文');
}else if(today == 2){
alert('數(shù)學(xué)');
}else if(today == 3){
alert('英語');
}else if(today == 4){
alert('美術(shù)');
}else if(today == 5){
alert('舞蹈');
}else{
alert('不補(bǔ)習(xí)');
}
條件分支語句也叫switch語句
語法:
switch(條件表達(dá)式){
case 表達(dá)式:
語句...
break;
case 表達(dá)式:
語句...
break;
default:
語句...
break;
}
執(zhí)行流程:
switch...case..語句
在執(zhí)行時會依次將case后的表達(dá)式的值和switch后的條件表達(dá)式的值進(jìn)行全等比較,
如果比較結(jié)果為true,則從當(dāng)前case處開始執(zhí)行代碼。
當(dāng)前case后的所有的代碼都會執(zhí)行,我們可以在case的后邊跟著一個break關(guān)鍵字,
這樣可以確保只會執(zhí)行當(dāng)前case后的語句,而不會執(zhí)行其他的case
如果比較結(jié)果為false,則繼續(xù)向下比較
如果所有的比較結(jié)果都為false,則只執(zhí)行default后的語句
switch語句和if語句的功能實(shí)際上有重復(fù)的,使用switch可以實(shí)現(xiàn)if的功能,同樣使用if也可以實(shí)現(xiàn)switch的功能,所以我們使用時,可以根據(jù)自己的習(xí)慣選擇。
var today = 4;
switch(today){
case 1:
alert('語文');
break;//結(jié)束整個switch語句
case 2:
alert('數(shù)學(xué)');
break;
case 3:
alert('英語');
break;
case 4:
alert('美術(shù)');
break;
case 5:
alert('舞蹈');
break;
default:
alert('不補(bǔ)習(xí)');
break;//最后一個default可以不寫break,但建議寫上
}
數(shù)組
-
面向?qū)ο蟮姆绞絼?chuàng)建
var aRr01 = new Array(1,2,3,'abc'); -
直接創(chuàng)建
var aRr02 = [1,2,3,'def'];//推薦使用,性能更高 -
獲取數(shù)組的成員數(shù)量(長度)
alert(aRr02.length);//彈出4 alert(aRr02[3]);//彈出cdf var aRr03 = [[1,2,3],['a','b','c','d'],[true,false]]; alert(aRr03.length);//彈出3 alert(aRr03[1].length);//彈出3 alert(aRr03[1][2]);//彈出c
數(shù)組常用方法
var aRr = [1,2,3,4];
-
用-連接數(shù)組元素并轉(zhuǎn)為字符串
var aRr = [1,2,3,4]; var sTr = aRr.join("-");//用-連接數(shù)組元素并轉(zhuǎn)為字符串,彈出1-2-3-4 -
用空串連接
var aRr = [1,2,3,4]; var sTr = aRr.join(''); alert(sTr);//彈出1234 -
向數(shù)組最后追加元素
var aRr = [1,2,3,4]; aRr.push(5); alert(aRr);//1,2,3,4,5 -
刪除末尾元素
var aRr = [1,2,3,4]; aRr.pop(); alert(aRr);//1,2,3 -
向最前面插入元素0
var aRr = [1,2,3,4]; aRr.unshift(0); alert(aRr);//0,1,2,3,4 -
刪除第一個(索引為0的)元素
var aRr = [1,2,3,4]; aRr.shift(); alert(aRr);//2,3,4 -
反轉(zhuǎn)
var aRr = [1,2,3,4]; aRr.reverse(); alert(aRr);//4,3,2,1 -
查找字母'b'第一次出現(xiàn)的索引
var aRr2 = ['a','b','c','d','a','b','c','d']; var num = aRr2.indexOf('b'); alert(num);//1 -
從第2索引元素開始,刪除1個元素
var aRr = [a,b,c,d]; aRr2.splice(2,1);//刪除c alert(aRr2);//a,b,d,a,b,c,d -
從第2索引元素開始,刪除1個元素,再插入e
var aRr = [a,b,c,d]; aRr2.splice(2,1,'e');//把c替換成e alert(aRr2);//a,b,e,d,a,b,c,d -
刪除后面的abcd,改為fghi
var aRr = [a,b,c,d]; aRr2.splice(4,4,'f','g','h','i'); alert(aRr2);//a,b,c,d,f,g,h,i
通過標(biāo)簽獲取元素
-
獲取頁面上所有的li
var aLi = document.getElementsByTagName('li'); -
獲取id為list01的ul
var oList = document.getElementById('list01'); -
再獲取這個ul下的所有l(wèi)i
var aLi = oList.getElementsByTagName('li'); alert(aLi.length);//8 -
指定索引處的li設(shè)定背景顏色
aLi[0].style.backgroundColor = 'gold'; aLi[1].style.backgroundColor = 'gold'; } </script> </head> <body> <ul id="list01"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> </ul>
循環(huán)語句
循環(huán)語句:
通過循環(huán)語句可以反復(fù)的執(zhí)行一段代碼多次
while循環(huán)
- 語法:
while(條件表達(dá)式){
語句...
}
- while語句在執(zhí)行時,
先對條件表達(dá)式進(jìn)行求值判斷,
如果值為true,則執(zhí)行循環(huán)體,
循環(huán)體執(zhí)行完畢以后,繼續(xù)對表達(dá)式進(jìn)行判斷
如果為true,則繼續(xù)執(zhí)行循環(huán)體,以此類推
如果值為false,則終止循環(huán)
do...while循環(huán)
- 語法:
do{
語句...
}while(條件表達(dá)式)
- 執(zhí)行流程:
do...while語句在執(zhí)行時,會先執(zhí)行循環(huán)體,
循環(huán)體執(zhí)行完畢以后,在對while后的條件表達(dá)式進(jìn)行判斷,
如果結(jié)果為true,則繼續(xù)執(zhí)行循環(huán)體,執(zhí)行完畢繼續(xù)判斷以此類推
如果結(jié)果為false,則終止循環(huán)
實(shí)際上這兩個語句功能類似,不同的是while是先判斷后執(zhí)行,
而do...while會先執(zhí)行后判斷,
do...while可以保證循環(huán)體至少執(zhí)行一次,
而while不能
for語句,也是一個循環(huán)語句,也稱為for循環(huán)
在for循環(huán)中,為我們提供了專門的位置用來放三個表達(dá)式:
1.初始化表達(dá)式
2.條件表達(dá)式
3.更新表達(dá)式
for循環(huán)的語法:
for(①初始化表達(dá)式;②條件表達(dá)式;④更新表達(dá)式){
③語句...
}
for循環(huán)的執(zhí)行流程:
①執(zhí)行初始化表達(dá)式,初始化變量(初始化表達(dá)式只會執(zhí)行一次)
②執(zhí)行條件表達(dá)式,判斷是否執(zhí)行循環(huán)。
如果為true,則執(zhí)行循環(huán)③
如果為false,終止循環(huán)
④執(zhí)行更新表達(dá)式,更新表達(dá)式執(zhí)行完畢繼續(xù)重復(fù)②
任意一種循環(huán)都可以互相嵌套
-
創(chuàng)建一個循環(huán),往往需要三個步驟
1.創(chuàng)初始化一個變量var j = 0;
2.在循環(huán)中設(shè)置一個條件表達(dá)式
while(j < aLi.length){
aLi[j].style.background = 'gold';
3.定義一個更新表達(dá)式,每次更新初始化變量
j++;
-
以下是死循環(huán)的寫法
像這種將條件表達(dá)式寫死為true的循環(huán),叫做死循環(huán)
該循環(huán)不會停止,除非瀏覽器關(guān)閉,死循環(huán)在開發(fā)中慎用
可以使用break,來終止循環(huán)while(true){ if(j>10){ break;//退出整個循環(huán) } j++; } //for循環(huán)的死循環(huán)寫法 for(;;){
break關(guān)鍵字可以用來退出switch或循環(huán)語句
不能在if語句中使用break和continue
break關(guān)鍵字,會立即終止離他最近的那個循環(huán)語句
continue關(guān)鍵字可以用來跳過當(dāng)次循環(huán)
同樣continue也是默認(rèn)只會對離他最近的循環(huán)循環(huán)起作用
-
可以為循環(huán)語句創(chuàng)建一個label,來標(biāo)識當(dāng)前的循環(huán)
label:循環(huán)語句
使用break語句時,可以在break后跟著一個label,
這樣break將會結(jié)束指定的循環(huán),而不是最近的outer: for(var i=0 ; i<5 ; i++){ console.log("@外層循環(huán)"+i); for(var j=0 ; j<5; j++){ console.log("內(nèi)層循環(huán):"+j); break outer; } } }
數(shù)組去重
<script type="text/javascript">
var aRr = [1,3,4,1,6,9,1,2,5,3,1,6,5,4,4];
var aRr2 = [];
for(var i=0; i<aRr.length; i++){
//判斷元素第一次出現(xiàn)的位置,恰好是當(dāng)前索引時,就將元素放入新數(shù)組
if(aRr.indexOf(aRr[i]) == i){
aRr2.push(aRr[i]);
}
}
alert(aRr2);//1,3,4,6,9,2,5
</script>
字符串處理的方法
-
字符串切斷轉(zhuǎn)成數(shù)組.split('-')
var sTr = '2018-06-20'; var aRr = sTr.split('-'); alert(aRr);//2018,06,20 -
修改<title>標(biāo)簽的內(nèi)容
document.title = aRr2; -
獲取指定索引的字符.charAt(0)
var sTr2 = '#div1'; var sTr3 = '.div1'; /*獲取指定索引的字符*/ var sTr4 = sTr2.charAt(0); if(sTr4 == '#'){ // alert('id選擇器'); } -
查看子串第一次出現(xiàn)的位置
var sTr5 = 'Microsoft Yahei'; var num = sTr5.indexOf('Yahei'); alert(num);//10 var num2 = sTr5.indexOf('xihei'); alert(num2);//沒有找到就彈出-1 -
substring截取子串
var sTr5 = 'Microsoft Yahei'; 從10開始,截到15(包括開始位置,不包括結(jié)束位置) var sTr6 = sTr5.substring(10,15);//Yahei 從10開始截取到末尾 var sTr6 = sTr5.substring(10);//Yahei alert(sTr6); -
全部轉(zhuǎn)為大寫字母
alert(sTr6.toUpperCase());//YAHEI -
全部轉(zhuǎn)為小寫字母
alert(sTr6.toLowerCase());//yahei
字符串反轉(zhuǎn)
1、split字符串轉(zhuǎn)成數(shù)組
2、reverse數(shù)組反轉(zhuǎn)
3、join數(shù)組轉(zhuǎn)成字符串
<script type="text/javascript">
var sTr = "123asdf79888asdfe21";
//1、split字符串轉(zhuǎn)成數(shù)組
//2、reverse數(shù)組反轉(zhuǎn)
//3、join數(shù)組轉(zhuǎn)成字符串
var sTr2 = sTr.split('').reverse().join('');
alert(sTr2);//12efdsa88897fdsa321
</script>
定時器的基本用法
setTimeout 只執(zhí)行一次的定時器
clearTimeout 關(guān)閉只執(zhí)行一次的定時器
setInterval 反復(fù)執(zhí)行的定時器
clearInterval 關(guān)閉反復(fù)執(zhí)行的定時器
單次定時器
var timer = setTimeout(function(){
alert('hello!');
}, 3000);
清除單次定時器
clearTimeout(timer);
反復(fù)循環(huán)定時器
var timer2 = setInterval(function(){
alert('hi~~~');
}, 2000);
清除反復(fù)循環(huán)定時器
clearInterval(timer2);
定時器彈框
定時器動畫
<style type="text/css">
.box{
width: 100px;
height: 100px;
background-color: gold;
position: fixed;
left: 20px;
top: 20px;
}
</style>
<script type="text/javascript">
window.onload = function(){
var oBox = document.getElementById('box');
var left = 20;
反復(fù)循環(huán)定時器,每30毫秒修改一次盒子的left值
var timer = setInterval(function(){
left += 2;
oBox.style.left = left + 'px';
當(dāng)left值大于700時停止動畫(清除定時器)
if(left > 700){
clearInterval(timer);
}
},30);
}
</script>
</head>
<body>
<div class="box" id="box"></div>
</body>
</html>
定時器制作時鐘
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>時鐘</title>
<style type="text/css">
</style>
<script type="text/javascript">
window.onload = function(){
var oBox = document.getElementById('box');
function timeGo(){
var now = new Date();
// alert(now);//彈出美式時間:Wed Jun 20 2018 15:27:13 GMT+0800 (中國標(biāo)準(zhǔn)時間)
var year = now.getFullYear();//2018年
var month = now.getMonth() + 1;//6月彈出5//范圍0-11
var date = now.getDate();//20號
var week = now.getDay();//3//星期幾,西半球時間,范圍0-6,星期日為一周的第一天,為0
var hour = now.getHours();
var minute = now.getMinutes();
var second = now.getSeconds();
// alert(hour + ":" + minute + ":" + second);//15:33:9
oBox.innerHTML = '當(dāng)前時間是:' + year + '年' + toDouble(month) + '月' + toDouble(date) + '日 ' + toWeek(week) + ' ' + toDouble(hour) + ":" + toDouble(minute) + ":" + toDouble(second);
}
timeGo();
setInterval(timeGo, 1000);
}
//此函數(shù)將星期的數(shù)字轉(zhuǎn)為漢字表示
function toWeek(num){
switch(num){
case 0:
return '星期天';
break;
case 1:
return '星期一';
break;
case 2:
return '星期二';
break;
case 3:
return '星期三';
break;
case 4:
return '星期四';
break;
case 5:
return '星期五';
break;
case 6:
return '星期六';
break;
}
}
//此函數(shù)將不足兩位的數(shù)字前面補(bǔ)0
function toDouble(num){
if(num < 10){
return '0' + num;
}else{
return num;
}
}
</script>
</head>
<body>
<div id="box"></div>
</body>
</html>
定時器倒計時
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>倒計時</title>
<script type="text/javascript">
window.onload = function(){
//活動第二天要將頁面下線,直接跳轉(zhuǎn)到其它頁面,不會走后面的代碼了
// window.location.;
var oDiv = document.getElementById('div1');
function timeLeft(){
//實(shí)際開發(fā)中此時間從服務(wù)器獲取,避免客戶端調(diào)整時間
var now = new Date();
var future = new Date(2018,5,20,16,30,20);
/ alert(future - now);//彈出與當(dāng)前時間相差的毫秒數(shù):12469935436
var milli = parseInt((future - now)/1000);
活動當(dāng)天頁面下線,避免倒計時到點(diǎn)后繼續(xù)計負(fù)時
/if(milli <= 0){
// /頁面跳轉(zhuǎn),不執(zhí)行下面的代碼了
/ window.location.;
/ }
var day = parseInt(milli / 86400);
var hour = parseInt(milli % 86400 / 3600);
var minute = parseInt(((milli % 86400) % 3600) / 60);
var second = milli % 60;
oDiv.innerHTML = '距離2018年11月12日00時00分00秒還有' + day + '天' + toDouble(hour) + '時' + toDouble(minute) + '分' + toDouble(second) + '秒';
}
timeLeft();
setInterval(timeLeft, 1000);
}
function toDouble(num){
if(num < 10){
return '0' + num;
}else{
return num;
}
}
</script>
</head>
<body>
<div id="div1"></div>
</body>
</html>
變量的作用域
全局變量:函數(shù)外部定義的變量,函數(shù)內(nèi)部和外部都可以訪問,它的值可以共享
局部變量:函數(shù)內(nèi)部定義的變量,函數(shù)內(nèi)部可以訪問,外部無法訪問。函數(shù)內(nèi)部訪問變量時,先在內(nèi)部查找是否有此變量,如果有,就使用內(nèi)部變量,如果沒有,就去外部查找
函數(shù)內(nèi)部如果不用'var'關(guān)鍵字定義變量,變量可能會變成全局變量,如果用嚴(yán)格模式解析會報錯
封閉函數(shù)
-
原來的寫法
function myAlert(){ var str = '歡迎訪問我的主頁'; alert(str); } myAlert();*/ -
封閉函數(shù)的一般寫法
var str = function(){ alert('test'); } -
封閉函數(shù)定義:(function(){……})()
;;(function(){ var str = '歡迎訪問我的主頁'; alert(str); })();//最后的()表示馬上執(zhí)行
封閉函數(shù)其他的寫法:在匿名函數(shù)前加“!”或者“~”,之后加“()”
~function(){
var str = '歡迎訪問我的主頁';
alert(str);
}();
用變量的方式定義函數(shù)
-
原來的寫法:可以提前
myAlert(); function myAlert(){ alert('hello!'); }*/ -
函數(shù)用變量方式定義:先定義再使用
myalert();//提前會報錯 var myAlert = function(){ alert('hello!'); } myAlert();//放在下面可以執(zhí)行
閉包
本質(zhì)就是函數(shù)嵌套,就是在函數(shù)里面定義函數(shù),
內(nèi)部函數(shù)可以引用外部函數(shù)的參數(shù)和變量
參數(shù)和變量不會被垃圾回收機(jī)制給回收
閉包的用途:可以存循環(huán)的索引值、做私有變量計數(shù)器
-
閉包的一般寫法
function aa(b){ var a = 12; function bb(){ alert(a); alert(b); } return bb; } var cc = aa(24); -
閉包的封閉函數(shù)寫法
var cc = (function(b){ var a = 12; function bb(){ alert(a); alert(b); } return bb; })(24); cc(); -
只能調(diào)用一次的閉包
(function(b){ var a = 12; function bb(){ alert(a); alert(b); } return bb; })(24)();