天天看點

Javascript(筆記02) - 基本語句和練習

Javascript 基本概念:語句

if、if else

for 循環

while 循環

do while 循環

switch case

break

continue

if 、if else

文法:

if(條件){
  語句
}else if(){
  語句
}else{
  語句
}      

條件成立,執行;條件不成立,不執行;

if(1>0){  // 條件成立
  document.write("hello world");
}

if(1>0 && 8>9){ // false  這裡的&&可以了解為并且 
}      

執行個體:根據得分區間去相應公司

var score = parseInt(window.prompt('input'));
// 90 - 100  ali
// 80 - 90   tecent toutiao meituan didi
// 70 - 80   baidu eleme xiecheng 58
// 60 - 70   mogujie
// 60以下    再接再厲

if(score > 90 && score < 100) {
    document.write('ali');
}
if(score > 80 && score <=90) {
    document.write('tencent');
}
if(score > 70 && score <=80) { 
    document.write('baidu');
}
if(score > 60 && score <=70) {
    document.write('mogujie');
}
if(score < 60) {
    document.write('Oh my god');     
}      

還可以優化一下,因為條件是“互斥”的,可以用else if

var score = parseInt(window.prompt('input'));

if(score > 90 && score < 100) {
    document.write('ali');
}else if(score > 80 && score <=90) {
    document.write('tencent');
}else if(score > 70 && score <=80) { 
    document.write('baidu');
}else if(score > 60 && score <=70) {
    document.write('mogujie');
}else if(score < 60) {
    document.write('Oh my god');     
}else{
    document.write("error");  // 大于100的情況
}      

if <--> && 轉換 ;if <--> || 轉換; 利用中斷效果,以下三段代碼是等價的。

if(2 > 1){
  document.write("hello world");
}

(2 > 1) && document.write("hello world");
(1 > 2) || document.write("hello world");      

for 循環

for(var i = 0; i < 3; i++) {
  document.write("a");
}      

循環的執行過程

1. var i = 0; 

2. if(i < 3){ // 條件成立

document.write('a');

}

3. i++; // i = 1; 

4. if(i < 3){ // 條件成立

document.write('a');

}

5. i++; // i = 2;

6. if(i < 3){ // 條件成立

document.write('a');

}

7. i++; // i = 3;

8. if(i < 3){} // 條件不成立,退出循環

for 循環也不是固定那個格式,也可以很靈活,效果一樣。

var i = 1;
for(; i ;){
    document.write('a');
    i ++;
    if(i == 3){
        i = 0;
    }
}      

執行個體1:求0-9的和

var sum = 0;
for(var i = 1; i < 10; i++){
    sum += i;
}
document.write(sum); // 45      

執行個體:列印出0-100内,即能被3整除又能被7整除的數。

for(var i = 1; i < 100; i++){
    if(i % 3 == 0 && i % 7 == 0){
        document.write(i+" "); //21 42 63 84
    }
}      

while 循環

文法:

while(條件){ 條件為真執行,條件為假不執行

語句

}

var i = 0;
while(i < 10){
  document.write(i);
  i++;
}      

無限循環(死循環):never-ending loop

while(1){}      

執行個體:100以内縫7喊,即帶7或7的倍數列印出來

var i = 1;
while(i < 100){
  if(i % 7 == 0 || i % 10 == 7){  // 設定兩個或的條件
    document.write(i + " "); // 7 14 17 ...
  }
  i++;
}      

do while循環

文法:代碼先執行一次,再看條件是否滿足,滿足再執行。

do{

代碼

}while(條件)

可讀性不好。不講了。

switch case

文法:

switch(條件){

case 值:

...

}

條件和值比對,一樣才執行,沒有大于小于一說

var n = true;
switch(n){
    case "a":
        console.log('a');
    case 2:
        console.log('b');
    case true:
        console.log('c');
}

// n = true 時,與case裡的true對比,結果輸出:c; 
// n = 2時,與case裡的2對比,結果輸出 bc。為什麼?
// 這種情況是:當找到滿足條件的語句執行後,後面也不判斷了,都連帶執行了,俗稱“往下漏”。
// n = "a"的話,會輸出 abc,這樣的特性有時不滿足需求; 
// 可以使用break來中斷;      

break

可以使用 break 來終止語句的執行;也可以終止循環。

var n = true;
switch(n){
    case "a":
        console.log('a');
        break;
    case 2:
        console.log('b');
        break;
    case true:
        console.log('c');
        break;
}      

執行個體:中斷switch的往下漏;

當判斷"比較精準的比對"時,使用switch case比較适合;

周一到周五都是 working 是一樣的,周六周天是 relaxing 也一樣,可以利用“往下漏”的特性來簡化;

// 當要判斷周一到周五時列印"working",判斷周六周天時列印"relaxing"
var date = window.prompt("請輸入");
switch (date) {
    case "monday":
    case "tuesday":
    case "wednesday":
    case "thursday":
    case "firday":
        console.log("working");
        break;
    case "saturday":
    case "sunday":
        console.log("relaxing");
        break;
}      

執行個體:終止循環 when;

var i = 0;
when(1){
  i ++;
  console.log(i);
  if(i > 100){
    break;
  }
}      

執行個體:終止循環 for;

break 必須放在循環裡面,否則報錯;

sum = 0;
for(var i = 0; i < 100; i++){
  sum += i; 
  console.log(i); // 1到14
  if(sum > 100){
    break;
  }
}      

continue

終止本次循環,進行下一次循環;

// 縫七過
for(var i =0; i < 100; i++){
  if(i % 7 == 0 || i % 10 == 7){
    continues;
  }
  console.log(i);
}      

作業練習

1>  計算2的N次幂,N可輸入,N為自然數;

// 1*2
// 1*2*2
// 1*2*2*2

var N = parseInt(window.prompt('input'));
res = 1;
for(var i = 0; i < N; i ++) {
    res = res * 2;
}
document.write(res);  // 輸入6,輸出64      

2>  計算N的階乘,N可輸入;

// 5! = 5*4*3*2*1
// 從1開始乘到他本身,0的階乘是1

var N = parseInt(window.prompt('input'));
var res = 1;        
for(var i = 1 ; i <= N; i++){
    res *= i;
}
document.write(res); // 0的階乘是1,1的階乘也是1;      

3>  著名的斐波那契數列, 1 1 2 3 5 8 輸出第N項;

// 第一步計算,先讓f位和s位相加和到t;
// 移動遊标,把s位指派給f位,再把t位指派給s位;
// 前兩項是已知為1,第N項輸出,需要循環N-2次;

var N = parseInt(window.prompt('input'));
var f = 1,
    s = 1,
    t; 
if(N > 2){
    for(var i =0; i < N - 2; i++){
        t = f + s;
        f = s;
        s = t;    
    }
    document.write(s);
}else{
    document.write(1);
}      

4>  輸入一個三位數的正整數,輸出時反向輸出,如:輸入456,輸出654;

// 用%的方法,挨個取

var N = parseInt(window.prompt('input'));
var res = 0; 
var a = (N % 100) % 10;  // 6
var b = ((N - a) / 10) % 10; // 5
var c = (N - a - b * 10) / 100; // 4
res = a * 100 + b * 10 + c;
document.write(res);      

5>  輸入a,b,c三個數字,列印出最大的;

// 先拿ab比,a大的話,b就沒用了。再拿ac比,取大;
// 如果ab比,b大的話,再拿bc比,取大;
// 如果ab相等,又大于c,那取b;

var a = parseInt(window.prompt('input'));
var b = parseInt(window.prompt('input'));
var c = parseInt(window.prompt('input'));

document.write("這三個數是:a = " + a + "; b = " + b + "; c = " + c + ";")
var res = "<br/>最大數是:";
if(a > b){
    if(a > c){
        document.write(res + "a = " + a +";");
    }else{
        document.write(res + "c = " + c +";");
    }
}else{
    if(b > c){
        document.write(res + "b = " + b +";");
    }else{
        document.write(res + "c = " + c +";");
    }
}      
// 質數隻能被1和本身整除,例如:5隻會被1和5整除;
// 使用取%的個數,取模為0隻有2次的就是質數,大于2次的就不是。
// 每次都要有個n來計數,每次n都要歸零

var Num = 100;
var n = 0;
for(var i = 1; i <= Num; i++){
    for(var j = 1; j <= i; j++){
        if(i % j == 0){  // 挨個%一遍,但凡%的結果n>2,就不是質數
            n ++;
        }
    }
    if(n == 2){
        document.write(i + " ");
    }
    n = 0;  // 重置0
}