JS基礎語法 學習筆記1

如下內容摘自阮一峯-JavaScript-標準參考教程express


語句

var a = 1 + 3;

1 + 3叫作表達式(expression),指一個爲了獲得返回值的計算式。語句和表達式的區別在於,前者主要爲了進行某種操做,通常狀況下不須要返回值;後者則是爲了獲得返回值,必定會返回一個值。凡是 JavaScript 語言中預期爲值的地方,均可以使用表達式。好比,賦值語句的等號右邊,預期是一個值,所以能夠放置各類表達式。code

變量

變量是對「值」的具名引用。變量就是爲「值」起名,而後引用這個名字,就等同於引用這個值。變量的名字就是變量名。教程

var a = 1;

上面的代碼先聲明變量a,而後在變量a與數值1之間創建引用關係,稱爲將數值1「賦值」給變量a。之後,引用變量名a就會獲得數值1。最前面的var,是變量聲明命令。它表示通知解釋引擎,要建立一個變量a。ip

變量的聲明和賦值,是分開的兩個步驟,上面的代碼將它們合在了一塊兒,實際的步驟是下面這樣。it

var a;
a = 1;

變量提高io

JavaScript 引擎的工做方式是,先解析代碼,獲取全部被聲明的變量,而後再一行一行地運行。這形成的結果,就是全部的變量的聲明語句,都會被提高到代碼的頭部,這就叫作變量提高(hoisting)。console

console.log(a);
var a = 1;

上面代碼首先使用console.log方法,在控制檯(console)顯示變量a的值。這時變量a尚未聲明和賦值,因此這是一種錯誤的作法,可是實際上不會報錯。由於存在變量提高,真正運行的是下面的代碼function

var a;
console.log(a);
a = 1;

最後的結果是顯示undefined,表示變量a已聲明,但還未賦值。 變量

-->只有在行首,纔會被當成單行註釋,不然會看成正常的運算。循環

function countdown(n) {
  while (n --> 0) console.log(n);
}
countdown(3)
// 2
// 1
// 0

IF語句

*else代碼塊老是與離本身最近的那個if語句配對。

var m = 1;
var n = 2;

if (m !== 1)
if (n === 2) console.log('hello');
else console.log('world');

上面代碼不會有任何輸出,else代碼塊不會獲得執行,由於它跟着的是最近的那個if語句,至關於下面這樣。

  if (m !== 1) {
  if (n === 2) {
    console.log('hello');    
  } else {
    console.log('world');
  }
}

若是想讓else代碼塊跟隨最上面的那個if語句,就要改變大括號的位置。

if (m !== 1) {
  if (n === 2) {
    console.log('hello');    
  }
} else {
  console.log('world');
}
// world

Switch語句

*須要注意的是,每一個case代碼塊內部的break語句不能少,不然會接下去執行下一個case代碼塊,而不是跳出 switch結構。

var x = 1;

switch (x) {
  case 1:
    console.log('x 等於1');
  case 2:
    console.log('x 等於2');
  default:
    console.log('x 等於其餘值');
}
// x等於1
// x等於2
// x等於其餘值

上面代碼中,case代碼塊之中沒有break語句,致使不會跳出switch結構,而會一直執行下去。正確的寫法是像下面這樣。

switch (x) {
  case 1:
    console.log('x 等於1');
    break;
  case 2:
    console.log('x 等於2');
    break;
  default:
    console.log('x 等於其餘值');
}

*須要注意的是,switch語句後面的表達式,與case語句後面的表示式比較運行結果時,採用的是嚴格相等運算符(===),而不是相等運算符(==),這意味着比較時不會發生類型轉換。

var x = 1;

switch (x) {
  case true:
    console.log('x 發生類型轉換');
  default:
    console.log('x 沒有發生類型轉換');
}
// x 沒有發生類型轉換

三元運算符

(條件) ? 表達式1 : 表達式2

上面代碼中,若是「條件」爲true,則返回「表達式1」的值,不然返回「表達式2」的值。

var msg = '數字' + n + '是' + (n % 2 === 0 ? '偶數' : '奇數');

break 語句和 continue 語句

*break語句用於跳出代碼塊或循環

var i = 0;

while(i < 100) {
  console.log('i 當前爲:' + i);
  i++;
  if (i === 10) break;
}

*continue語句用於當即終止本輪循環,返回循環結構的頭部,開始下一輪循環。

var i = 0;

while (i < 100){
  i++;
  if (i % 2 === 0) continue;
  console.log('i 當前爲:' + i);
}

上面代碼只有在i爲奇數時,纔會輸出i的值。若是i爲偶數,則直接進入下一輪循環。

*若是存在多重循環,不帶參數的break語句和continue語句都只針對最內層循環。

標籤(label)

JavaScript 語言容許,語句的前面有標籤(label),至關於定位符,用於跳轉到程序的任意位置,標籤的格式以下。

**label:
  語句**

標籤一般與break語句和continue語句配合使用,跳出特定的循環

top:
  for (var i = 0; i < 3; i++){
    for (var j = 0; j < 3; j++){
      if (i === 1 && j === 1) break top;
      console.log('i=' + i + ', j=' + j);
    }
  }
// i=0, j=0
// i=0, j=1
// i=0, j=2
// i=1, j=0

上面代碼爲一個雙重循環區塊,break命令後面加上了top標籤(注意,top不用加引號),知足條件時,直接跳出雙層循環。若是break語句後面不使用標籤,則只能跳出內層循環,進入下一次的外層循環。

continue語句也能夠與標籤配合使用。

top:
  for (var i = 0; i < 3; i++){
    for (var j = 0; j < 3; j++){
      if (i === 1 && j === 1) continue top;
      console.log('i=' + i + ', j=' + j);
    }
  }
// i=0, j=0
// i=0, j=1
// i=0, j=2
// i=1, j=0
// i=2, j=0
// i=2, j=1
// i=2, j=2
相關文章
相關標籤/搜索