變量和函數(shù)預(yù)解析:只把變量a的聲明提前齐疙,賦值不提前膜楷,所以彈出undefined,表示它的定義
流程控制語句贞奋,JS中的程序是從上到下一行一行執(zhí)行的把将,通過流程控制語句可以控制程序流程,使程序可以根據(jù)一定的條件來選擇執(zhí)行
- 語句的分類:
1.條件判斷語句 2.條件分支語句 3.循環(huán)語句
條件判斷語句: 使用條件判斷語句可以在執(zhí)行某個(gè)語句之前進(jìn)行判斷忆矛,
如果條件成立才會(huì)執(zhí)行語句察蹲,條件不成立則語句不執(zhí)行。
- if語句
- 語法一:
if(條件表達(dá)式){語句...}
if語句在執(zhí)行時(shí)催训,會(huì)先對(duì)條件表達(dá)式進(jìn)行求值判斷洽议,
如果條件表達(dá)式的值為true,則執(zhí)行if后的語句漫拭,
如果條件表達(dá)式的值為false亚兄,則不會(huì)執(zhí)行if后的語句。
if語句只能控制緊隨其后的那個(gè)語句,
如果希望if語句可以控制多條語句采驻,
可以將這些語句統(tǒng)一放到代碼塊中
if語句后的代碼塊(即{})不是必須的审胚,但是在開發(fā)中盡量寫上代碼塊,即使if后只有一條語句
- 語法二:
if(條件表達(dá)式){語句...}else{語句...}
if...else...語句
當(dāng)該語句執(zhí)行時(shí)礼旅,會(huì)先對(duì)if后的條件表達(dá)式進(jìn)行求值判斷膳叨,
如果該值為true,則執(zhí)行if后的語句
如果該值為false痘系,則執(zhí)行else后的語句
if語句語法三:if(條件表達(dá)式){語句...}else if(條件表達(dá)式){語句...}else if(條件表達(dá)式){語句...}else{語句...}
if...else if...else
當(dāng)該語句執(zhí)行時(shí)菲嘴,會(huì)從上到下依次對(duì)條件表達(dá)式進(jìn)行求值判斷
如果值為true,則執(zhí)行當(dāng)前語句。
如果值為false龄坪,則繼續(xù)向下判斷昭雌。
如果所有的條件都不滿足,則執(zhí)行最后一個(gè)else后的語句
該語句中健田,只會(huì)有一個(gè)代碼塊被執(zhí)行烛卧,一旦代碼塊執(zhí)行了,則直接結(jié)束語句
條件分支語句也叫switch語句switch(條件表達(dá)式){case?表達(dá)式:語句...break妓局;default? 語句...break唱星;}
執(zhí)行流程:
switch...case..語句
在執(zhí)行時(shí)會(huì)依次將case后的表達(dá)式的值和switch后的條件表達(dá)式的值進(jìn)行全等比較,
如果比較結(jié)果為true跟磨,則從當(dāng)前case處開始執(zhí)行代碼间聊。
當(dāng)前case后的所有的代碼都會(huì)執(zhí)行,我們可以在case的后邊跟著一個(gè)break關(guān)鍵字抵拘,
這樣可以確保只會(huì)執(zhí)行當(dāng)前case后的語句哎榴,而不會(huì)執(zhí)行其他的case
如果比較結(jié)果為false,則繼續(xù)向下比較
如果所有的比較結(jié)果都為false僵蛛,則只執(zhí)行default后的語句
switch語句和if語句的功能實(shí)際上有重復(fù)的尚蝌,使用switch可以實(shí)現(xiàn)if的功能,同樣使用if也可以實(shí)現(xiàn)switch的功能充尉,所以我們使用時(shí)飘言,可以根據(jù)自己的習(xí)慣選擇。
Array.prototype.unique1 = function () {
? ? var n = []; //一個(gè)新的臨時(shí)數(shù)組
? ? for (var i = 0; i < this.length; i++) //遍歷當(dāng)前數(shù)組
? ? {
? ? ? //如果當(dāng)前數(shù)組的第i已經(jīng)保存進(jìn)了臨時(shí)數(shù)組驼侠,那么跳過姿鸿,
? ? ? //否則把當(dāng)前項(xiàng)push到臨時(shí)數(shù)組里面
? ? ? if (n.indexOf(this[i]) == -1) n.push(this[i]);
? ? }
? ? return n;
};
Array.prototype.unique2 = function()
{
? ? var n = {},r=[]; //n為hash表,r為臨時(shí)數(shù)組
? ? for(var i = 0; i < this.length; i++) //遍歷當(dāng)前數(shù)組
? ? {
? ? ? ? if (!n[this[i]]) //如果hash表中沒有當(dāng)前項(xiàng)
? ? ? ? {
? ? ? ? ? ? n[this[i]] = true; //存入hash表
? ? ? ? ? ? r.push(this[i]); //把當(dāng)前數(shù)組的當(dāng)前項(xiàng)push到臨時(shí)數(shù)組里面
? ? ? ? }
? ? }
? ? return r;
};
Array.prototype.unique3 = function()
{
? ? var n = [this[0]]; //結(jié)果數(shù)組
? ? for(var i = 1; i < this.length; i++) //從第二項(xiàng)開始遍歷
? ? {
? ? ? ? //如果當(dāng)前數(shù)組的第i項(xiàng)在當(dāng)前數(shù)組中第一次出現(xiàn)的位置不是i倒源,
? ? ? ? //那么表示第i項(xiàng)是重復(fù)的苛预,忽略掉。否則存入結(jié)果數(shù)組
? ? ? ? if (this.indexOf(this[i]) == i) n.push(this[i]);
? ? }
? ? return n;
};
? Array.prototype.unique4 = function()
{
? ? this.sort();
? ? var re=[this[0]];
? ? for(var i = 1; i < this.length; i++)
? ? {
? ? ? ? if( this[i] !== re[re.length-1])
? ? ? ? {
? ? ? ? ? ? re.push(this[i]);
? ? ? ? }
? ? }
? ? return re;
};
var arr = [1,2,2,2,3,3,4,5];
console.log(arr.unique1()); // [1, 2, 3, 4, 5]
console.log(arr.unique2()); // [1, 2, 3, 4, 5]
console.log(arr.unique3()); // [1, 2, 3, 4, 5]
console.log(arr.unique4()); // [1, 2, 3, 4, 5
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>合格</title>
<script type="text/javascript">
var score = +prompt('輸入分?jǐn)?shù)');? <!--prompt是一個(gè)內(nèi)置函數(shù)笋熬,用它可以調(diào)出資料框热某,讓用戶輸入相關(guān)信息-->
switch(parseInt(score/10)){ <!--將score/10的結(jié)果放入switch進(jìn)行判斷,-->
case 10:
case 9:
case 8:
case 7:
case 6:
? alert('合格');
break;
default:
? alert('不合格');
? break;
? }
</script>
</head>
<body>
</body>
</html>
case標(biāo)簽必須是惟一性的表達(dá)式;也就是說胳螟,不允許兩個(gè)case具有相同的值昔馋。
打印1-100之間的和
var num = 0? <!--var num=0;——定義num是一個(gè)變量,且給num賦初值0-->
? ? ? ? for(var i=0;i<100;i++){? ? <!--i++——表示每循環(huán)一次糖耸,i的值就加1秘遏。
整個(gè)for循環(huán)語句最多可以循環(huán)100次-->
? ? ? ? ? ? if(i % 2 != 0){
? ? ? ? ? ? ? ? num+=i
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? alert(num);
打印1-100之間所有7的倍數(shù)的個(gè)數(shù)及總和
? ? var alist = [];<!--聲明一個(gè)空的二維數(shù)組-->
? ? ? ? var num = 0<!--聲明一個(gè)變量,num的默認(rèn)值是0-->
? ? ? ? for (var i = 0;i<100;i++){<!--- int i就定義了這個(gè)i的類型為整型蔬捷,就相當(dāng)于我們的名字前面的姓一樣,? i<100垄提,在這里是int i<100,由于前面定義了i為int,所以省略了int周拐,意思是這個(gè)變量i是小于100的整數(shù)-->
? ? ? ? ? ? if(i % 7==0){ <!--這個(gè)先求余然后判斷是否為0--->
? ? ? ? ? ? ? ? list.push(i? ?
? ? ? ? ? ? ? ? num+=i? ?
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? console.log(alist.length);
? ? ? ? console.log(num);
打印乘法口訣表
var i ,j;
? ? ? ? ? ? for(i=1;i<10;i++){
? ? ? ? ? ? for(j=1;j<=i;j++){
? ? ? ? ? ? document.write(" "+i+"*"+j+"="+i*j+" ");
? ? ? ? ? ? }document.write("<br/>")? <!--打印換行-->
? ? ? ? ? ? }
打印1-100的質(zhì)數(shù)
? var flag=0;
? ? ? ? ? ? for(var j=1;j<101;j++){
? ? ? ? ? ? ? ? for(var i=2;i<j;i++){
? ? ? ? ? ? ? ? ? ? if(j%i==0){
? ? ? ? ? ? ? ? ? ? ? ? flag=1;
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? ? ? flag=0;<!--從循環(huán)開始铡俐,到當(dāng)變量flag = 0時(shí),循環(huán)結(jié)束.-->
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(flag==0&&j!=1){
? ? ? ? ? ? ? ? ? ? console.log(j);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
除了1和此整數(shù)自身外妥粟,沒法被其他自然數(shù)整除的數(shù)
4.在頁面中接收一個(gè)用戶輸入的數(shù)字审丘,并判斷該數(shù)是否是質(zhì)數(shù)。
質(zhì)數(shù):只能被1和它自身整除的數(shù)勾给,1不是質(zhì)數(shù)也不是合數(shù)滩报,質(zhì)數(shù)必須是大于1的自然數(shù)。
var num = prompt('請(qǐng)輸入一個(gè)大于1的數(shù)字:');
? ? ? if(num<=1||isNaN(num)){
? ? ? ? ? alert('該值不合法播急!')
? ? ? ? ? }else{
? ? ? ? ? ? ? var flag = true;
? ? ? ? ? ? ? for(var i = 2;i<num;i++){
? ? ? ? ? ? ? ? ? if(num % i ==0){
? ? ? ? ? ? ? ? ? ? ? flag = false;
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? }
? ? ? ? ? ? ? if(flag){
? ? ? ? ? ? ? ? ? alert('是質(zhì)數(shù)');
? ? ? ? ? ? ? }