JS的基本語法

語句和表達式

語句(statement)是為了完成某種任務(wù)而進行的操作,JavaScript 程序的執(zhí)行單位為行(line),也就是一行一行地執(zhí)行。一般情況下,每一行就是一個語句。

var a = 1_3;

這條語句先用var命令,聲明了變量a,然后將1 + 3的運算結(jié)果賦值給變量a。
1 + 3叫做表達式(expression),指一個為了得到返回值的計算式。

區(qū)別

語句: 主要為了進行某種操作,一般情況下不需要返回值;語句以分號結(jié)尾,一個分號就表示一個語句結(jié)束。多個語句可以寫在一行內(nèi)。

表達式: 則是為了得到返回值,一定會返回一個值。凡是 JavaScript 語言中預(yù)期為值的地方,都可以使用表達式。

變量

變量是對“值”的具名引用。變量就是為“值”起名,然后引用這個名字,就等同于引用這個值。變量的名字就是變量名。
變量的聲明和賦值,是分開的兩個步驟

var a;
a = 1;

上面的代碼先聲明變量a,然后在變量a與數(shù)值1之間建立引用關(guān)系,稱為將數(shù)值1“賦值”給變量a。

如果只是聲明變量而沒有賦值,則該變量的值是undefined。undefined是一個特殊的值,表示“無定義”。

var a ;
a  // undefined

如果只是聲明變量而沒有賦值,則該變量的值是undefined。undefined是一個特殊的值,表示“無定義”。

如果變量賦值的時候,忘了寫var命令,這條語句也是有效的。但是,不寫var的做法,不利于表達意圖,而且容易不知不覺地創(chuàng)建全局變量,所以建議總是使用var命令聲明變量。

如果一個變量沒有聲明就直接使用,JavaScript 會報錯,告訴你變量未定義。

如果使用var重新聲明一個已經(jīng)存在的變量,是無效的。
變量聲明了兩次,第二次聲明是無效的。
但是,如果第二次聲明的時候還進行了賦值,則會覆蓋掉前面的值。
使用console.log方法,在控制臺(console)顯示變量的值。

標識符

標識符(identifier)指的是用來識別各種值的合法名稱。最常見的標識符就是變量名,以及后面要提到的函數(shù)名。

標識符命名規(guī)則如下。

  • 第一個字符,可以是任意 Unicode 字母(包括英文字母和其他語言的字母),以及美元符號($)和下劃線(_)。第一個字符不能是數(shù)字
  • 第二個字符及后面的字符,除了 Unicode 字母、美元符號和下劃線,還可以用數(shù)字0-9。

標識符不能包含星號、加號、減號或連詞線。

注釋

作用是對代碼進行解釋。JavaScript 提供兩種注釋的寫法:一種是單行注釋,用//起頭;另一種是多行注釋,放在/* 和*/之間。

// 這是單行注釋

/*
 這是
 多行
 注釋
*/

JavaScript 可以兼容 HTML 代碼的注釋。

<!--  -->

需要注意的是,-->只有在行首,才會被當(dāng)成單行注釋,否則會當(dāng)作正常的運算。

區(qū)塊

JavaScript 使用大括號,將多個相關(guān)的語句組合在一起,稱為“區(qū)塊”(block)。

{
var a = 1;
}

上面代碼在區(qū)塊內(nèi)部,使用var命令聲明并賦值了變量a。

在 JavaScript 語言中,單獨使用區(qū)塊并不常見,區(qū)塊往往用來構(gòu)成其他更復(fù)雜的語法結(jié)構(gòu),比如for、if、while、function等。

if結(jié)構(gòu)

if結(jié)構(gòu)先判斷一個表達式的布爾值,然后根據(jù)布爾值的真?zhèn)?/strong>,執(zhí)行不同的語句。所謂布爾值,指的是 JavaScript 的兩個特殊值,true表示真,false表示偽。
基本形式

if (布爾值)
語句;
// 或者
if (布爾值) 語句;

“布爾值”往往由一個條件表達式產(chǎn)生的,必須放在圓括號中,表示對表達式求值。如果表達式的求值結(jié)果為true,就執(zhí)行緊跟在后面的語句;如果結(jié)果為false,則跳過緊跟在后面的語句。

if (m === 3)
  m = m + 1;

上面代碼表示,只有在m等于3時,才會將其值加上1。

這種寫法要求條件表達式后面只能有一個語句。如果想執(zhí)行多個語句,必須在if的條件判斷之后,加上大括號,表示代碼塊(多個語句合并成一個語句)。

if (m === 3) {
  m += 1;
}

注意,if后面的表達式之中,不要混淆賦值表達式(=)嚴格相等運算符(===)相等運算符(==)。尤其是賦值表達式不具有比較作用。
例如:

var x = 1;
var y = 2;
if (x = y) {
  console.log(x);
}
// "2"

原意是,當(dāng)x等于y的時候,才執(zhí)行相關(guān)語句。

但是,不小心將嚴格相等運算符( === )寫成 賦值表達式( == ),結(jié)果變成了將y賦值給變量x,再判斷變量x的值(等于2)的布爾值(結(jié)果為true)

if (x = 2) { // 不報錯
if (2 = x) { // 報錯
if...else結(jié)構(gòu)

if代碼塊后面,還可以跟一個else代碼塊,表示不滿足條件時,所要執(zhí)行的代碼。

對同一個變量進行多次判斷時,多個if...else語句可以連寫在一起。
else代碼塊總是與離自己最近的那個if語句配對。
如果想讓else代碼塊跟隨最上面的那個if語句,就要改變大括號的位置。
表達式:

if (表達式) {
語句1
} else {
語句2
}
switch結(jié)構(gòu)

多個if...else連在一起使用的時候,可以轉(zhuǎn)為使用更方便的switch結(jié)構(gòu)。

switch (fruit) {
  case "banana":
    // ...
    break;
  case "apple":
    // ...
    break;
  default:
    // ...
}

上面代碼根據(jù)變量fruit的值,選擇執(zhí)行相應(yīng)的case。如果所有case都不符合,則執(zhí)行最后的default部分。

需要注意的是,每個case代碼塊內(nèi)部的break語句不能少,否則會接下去執(zhí)行下一個case代碼塊,而不是跳出switch結(jié)構(gòu)。會一直執(zhí)行下去。

循環(huán)語句

while循環(huán)

While語句包括一個循環(huán)條件和一段代碼塊,只要條件為,就不斷循環(huán)執(zhí)行代碼塊。
基本語法:

while (條件)
  語句;

// 或者
while (條件) 語句;

while語句的循環(huán)條件是一個表達式,必須放在圓括號中。代碼塊部分,如果只有一條語句,可以省略大括號(但不推薦),否則就必須加上大括號。
例如

var i = 0;

while (i < 100) {
  console.log('i 當(dāng)前為:' + i);
  i = i + 1;
}

上面的代碼將循環(huán)100次,直到i等于100為止。

while (true) {
  console.log('Hello, world');
}

是一個無限循環(huán),因為循環(huán)條件總是為真。

for循環(huán)

for語句是循環(huán)命令的另一種形式,可以指定循環(huán)的起點、終點和終止條件

基本表達式:

for (初始化表達式; 條件; 遞增表達式)
  語句

// 或者

for (初始化表達式; 條件; 遞增表達式) {
  語句
}

for語句后面的括號里面,有三個表達式。

  • 初始化表達式(initialize):確定循環(huán)變量的初始值,只在循環(huán)開始時執(zhí)行一次。
  • 條件表達式(test):每輪循環(huán)開始時,都要執(zhí)行這個條件表達式,只有值為真,才繼續(xù)進行循環(huán)。
  • 遞增表達式(increment):每輪循環(huán)的最后一個操作,通常用來遞增循環(huán)變量。
    例如
var x = 3;
for (var i = 0; i < x; i++) {
  console.log(i);
}
// 0
// 1
// 2

上面代碼中,初始化表達式是var i = 0,即初始化一個變量i;測試表達式是i < x,即只要i小于x,就會執(zhí)行循環(huán);遞增表達式是i++,即每次循環(huán)結(jié)束后,i增大1。

所有for循環(huán),都可以改寫成while循環(huán)。上面的例子改為while循環(huán),代碼如下。

var x = 3;
var i = 0;

while (i < x) {
  console.log(i);
  i++;
}

for語句的三個部分(initialize、test、increment),可以省略任何一個,也可以全部省略。

for ( ; ; ){
  console.log('Hello World');
}

上面代碼省略了for語句表達式的三個部分,結(jié)果就導(dǎo)致了一個無限循環(huán)。

break語句和continue語句

break語句

用于跳出代碼塊或循環(huán)。

var i = 0;

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

上面代碼只會執(zhí)行10次循環(huán),一旦i等于10,就會跳出循環(huán)。

for循環(huán)也可以使用break語句跳出循環(huán)。

continue語句

用于立即終止本輪循環(huán),返回循環(huán)結(jié)構(gòu)的頭部,開始下一輪循環(huán)。

var i = 0;

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

上面代碼只有在i為奇數(shù)時,才會輸出i的值。如果i為偶數(shù),則直接進入下一輪循環(huán)。

如果存在多重循環(huán),不帶參數(shù)的break語句和continue語句都只針對最內(nèi)層循環(huán)。

label標簽

JavaScript 語言允許,語句的前面有標簽(label),相當(dāng)于定位符,用于跳轉(zhuǎn)到程序的任意位置,標簽的格式如下。

標簽通常與break語句continue語句配合使用,跳出特定的循環(huán)。

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

上面代碼為一個雙重循環(huán)區(qū)塊,break命令后面加上了top標簽(注意,top不用加引號),滿足條件時,直接跳出雙層循環(huán)。如果break語句后面不使用標簽,則只能跳出內(nèi)層循環(huán),進入下一次的外層循環(huán)。

標簽也可以用于跳出代碼塊。

foo: {
  console.log(1);
  break foo;
  console.log('本行不會輸出');
}
console.log(2);
// 1
// 2

上面代碼執(zhí)行到break foo,就會跳出區(qū)塊。

{
foo : 1
}

意思是:有一個代碼塊,里面還有一個標簽foo,foo的內(nèi)容是1的語句。

聲明:該文都摘錄于《網(wǎng)道JavaScript教程》入門篇,僅供學(xué)習(xí)和參考。不得轉(zhuǎn)載。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、JavaScript和ECMAScript的關(guān)系 1996年8月,微軟模仿JavaScript開發(fā)了一種相近的...
    瘋狂的蝸牛Dianna閱讀 531評論 0 0
  • 一、JS的“語句”和“表達式” JavaScript 程序的執(zhí)行單位為行(line),也就是一行一行地執(zhí)行。一般情...
    scotton閱讀 313評論 0 0
  • js語句和表達式 兩者的定義區(qū)別:一個表達式一般會產(chǎn)生一個值,它可以放在任何需要一個值的地方;語句則是由分號分隔的...
    2b61575c37fd閱讀 320評論 0 0
  • 1. 表達式 1.1 理解一下: 是由運算元和運算符(可選)構(gòu)成,并產(chǎn)生運算結(jié)果的語法結(jié)構(gòu) 表達式均有返回值,如果...
    Sharpe閱讀 244評論 0 0

友情鏈接更多精彩內(nèi)容