我们首先要学习的是代码的构建块。
语句
语句是执行动作的语法结构和命令。
我们已经看到一条语句,alert('Hello, world!')
,它显示消息“Hello, world!”。
我们的代码中可以包含任意多条语句。语句可以用分号分隔。
例如,这里我们将“Hello World”拆分为两个警报
alert('Hello'); alert('World');
通常,语句会写在不同的行上,以便让代码更易于阅读
alert('Hello');
alert('World');
分号
在大多数情况下,当存在换行符时,分号可以省略。
这也可以
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
后面加一个分号,才能使代码正常工作。
在其他情况下也可能发生这种情况。
我们建议即使语句由换行符分隔,也要在语句之间加分号。社区广泛采用此规则。让我们再次注意——有可能在大多数情况下省略分号。但使用它们更安全——尤其是对于初学者。
评论
随着时间的推移,程序变得越来越复杂。有必要添加描述代码的作用和原因的注释。
注释可以放在脚本的任何位置。它们不会影响其执行,因为引擎只是忽略它们。
单行注释以两个正斜杠字符 //
开头。
该行的其余部分是注释。它可以占据自己的一整行,或跟随一个语句。
就像这里
// This comment occupies a line of its own
alert('Hello');
alert('World'); // This comment follows the statement
多行注释以正斜杠和星号 /*
开头,以星号和正斜杠 */
结束。
就像这样
/* An example with two messages.
This is a multiline comment.
*/
alert('Hello');
alert('World');
注释的内容被忽略,所以如果我们在 /* … */
中放置代码,它将不会执行。
有时暂时禁用部分代码可能很方便
/* Commenting out the code
alert('Hello');
*/
alert('World');
在大多数编辑器中,可以通过按 Ctrl+/ 热键对单行注释进行注释,而对多行注释进行注释则类似于 Ctrl+Shift+/(选择一段代码并按热键)。对于 Mac,尝试使用 Cmd 而不是 Ctrl,使用 Option 而不是 Shift。
另一个 /*...*/
中可能没有 /*...*/
。
此类代码将因错误而终止
/*
/* nested comment ?!? */
*/
alert( 'World' );
请不要犹豫,对您的代码进行注释。
注释会增加整体代码占用空间,但这根本不是问题。在发布到生产服务器之前,有许多工具可以压缩代码。它们会删除注释,因此它们不会出现在工作脚本中。因此,注释根本不会对生产产生负面影响。
稍后在教程中将有一章 代码质量,其中还将说明如何编写更好的注释。
评论
<code>
标签,对于多行代码 - 将其包装在<pre>
标签中,对于超过 10 行的代码 - 使用沙盒 (plnkr,jsbin,codepen…)