JavaScript代码结构
我们将研究的第一件事是代码的构建块。
声明
语句是执行操作的语法结构和命令。
我们已经看到了一个语句,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');
使用热键!
在大多数编辑器中,可以通过按单行注释的热键和诸如– 多行注释的热键来注释掉一行代码(选择一段代码并按热键)。对于 Mac,请尝试代替和代替。Ctrl+/Ctrl+Shift+/CmdCtrlOptionShift
不支持嵌套注释!
/*...*/里面可能没有另一个/*...*/。
这样的代码会因错误而停止运行:
/* /* nested comment ?!? */ */ alert( 'World' );