我們將要學習的第壹個內容就是構建代碼塊。
語句是執行行爲(action)的語法結構和命令。
我們已經見過了 alert('Hello, world!')
這樣可以用來顯示消息的語句。
我們可以在代碼中編寫任意數量的語句。語句之間可以使用分號進行分割。
例如,我們將 “Hello World” 這條信息壹分爲二:
alert('Hello'); alert('World');
通常,每條語句獨占壹行,以提高代碼的可讀性:
alert('Hello'); alert('World');
當存在換行符(line break)時,在大多數情況下可以省略分號。
下面的代碼也是可以運行的:
alert('Hello') alert('World')
在這,JavaScript 將換行符理解成“隱式”的分號。這也被稱爲 自動分號插入。
在大多數情況下,換行意味著壹個分號。但是“大多數情況”並不意味著“總是”!
有很多換行並不是分號的例子,例如:
alert(3 + 1 + 2);
代碼輸出 6
,因爲 JavaScript 並沒有在這裏插入分號。顯而易見的是,如果壹行以加號 "+"
結尾,那麽這是壹個“不完整的表達式”,不需要分號。所以,這個例子得到了預期的結果。
但存在 JavaScript 無法確定是否真的需要自動插入分號的情況。
這種情況下發生的錯誤是很難被找到和解決的。
壹個錯誤的例子
如果妳好奇地想知道壹個這種錯誤的具體例子,那妳可以看看下面這段代碼:
alert("Hello"); [1, 2].forEach(alert);
妳不需要考慮方括號 []
和 forEach
的含義,現在它們並不重要,之後我們會學習它們。讓我們先記住這段代碼的運行結果:先顯示 Hello
,然後顯示 1
,然後 2
。
現在,讓我們刪除 alert
語句後的分號:
alert("Hello") [1, 2].forEach(alert);
與上面的代碼相比只有壹個字符的區別:第壹行末尾的分號不見了。
如果我們運行這段代碼,只有第壹個 Hello
會被顯示出來(並且有壹個報錯,妳可能需要打開控制台才能看到它)。並且不會再有數字被顯示出來。
這是因爲,JavaScript 引擎並沒有假設在方括號 [...]
前有壹個分號。因此,最後壹個示例中的代碼被視爲了單個語句。
對于引擎來說,它是這樣的:
alert("Hello")[1, 2].forEach(alert);
看起來很奇怪,對吧?在這種情況下,這樣將兩行代碼合並到壹起是不對的。我們需要在 alert
後面加壹個分號,代碼才能正常運行。
這也可能發生在其他情況下。
即使語句被換行符分隔了,我們依然建議在它們之間加分號。這個規則被社區廣泛采用。我們再次強調壹下 —— 大部分時候可以省略分號,但是最好不要省略分號,尤其對新手來說。
隨著時間推移,程序變得越來越複雜。爲代碼添加 注釋 來描述它做了什麽和爲什麽要這樣做,變得非常有必要了。
妳可以在腳本的任何地方添加注釋,它們並不會影響代碼的執行,因爲引擎會直接忽略它們。
單行注釋以兩個正斜杠字符 //
開始。
這壹行的剩余部分是注釋。它可能獨占壹行或者跟隨在壹條語句的後面。
就像這樣:
// 這行注釋獨占壹行 alert('Hello'); alert('World'); // 這行注釋跟隨在語句後面
多行注釋以壹個正斜杠和星號開始 “/*”
並以壹個星號和正斜杠結束 “*/”
。
就像這樣:
/* 兩個消息的例子。 這是壹個多行注釋。 */ alert('Hello'); alert('World');
注釋的內容被忽略了,所以如果我們在 /* … */
中放入代碼,並不會執行。
有時候,可以很方便地臨時禁用代碼:
/* 注釋代碼 alert('Hello'); */ alert('World');
使用快捷鍵!
在大多數的編輯器中,壹行代碼可以使用Ctrl+/快捷鍵進行單行注釋,諸如Ctrl+Shift+/的快捷鍵可以進行多行注釋(選擇代碼,然後按下快捷鍵)。對于 Mac 電腦,應使用Cmd而不是Ctrl,使用Option而不是Shift。
不支持注釋嵌套!
不要在 /*...*/
內嵌套另壹個 /*...*/
。
下面這段代碼報錯而無法執行:
/* /* 嵌套注釋 ?!? */ */ alert( 'World' );
對妳的代碼進行注釋,這還有什麽可猶豫的!
注釋會增加代碼總量,但這壹點也不是什麽問題。有很多工具可以幫妳在把代碼部署到服務器之前縮減代碼。這些工具會移除注釋,這樣注釋就不會出現在發布的腳本中。所以,注釋對我們的生産沒有任何負面影響。
在後面的教程中,會有壹章 代碼質量 的內容解釋如何更好地寫注釋。