跳转到内容

JavaScript/词法结构

来自维基教科书,开放的书籍,构建开放的世界



  • 语言中的所有元素都区分大小写,例如:const x = 0; const X = 0; 定义了两个不同的变量;CONST x = 0; 会导致语法错误。
  • 单行注释以 // 开头。多行注释用 /* */ 括起来。
  • 语句末尾的分号是可选的 - 除了少数例外。
  • 变量名的第一个字符不能是数字:const 1x = 0; 会导致语法错误。


区分大小写

[编辑 | 编辑源代码]

JavaScript 区分大小写。这意味着所有关键字、变量名和函数名必须一致地书写。如果你创建一个函数 Hello(),它与函数 HELLO()hello()hEllo() 不同。或者,语句 IF (x > 0) { } 会导致语法错误,因为关键字 if 是小写定义的。

空白符

[编辑 | 编辑源代码]

空白符包括空格、制表符和换行符。[注释 1] 如果存在多个空白符的序列,JavaScript 会将它们缩减为一个空白符,例如:'    ' -> ' ','\n\t' -> '\n'。这个剩下的单个空白符用于将语言元素(如关键字和变量名)彼此分隔。对于人类来说,这样生成的源代码难以阅读[2],但对于浏览器来说(稍微)更容易解析。主要优势是代码的大小更小,需要在服务器和客户端之间传输。

以下脚本是一个空白符很少的示例。

function filterEmailKeys(event){
event=event||window.event;
const charCode=event.charCode||event.keyCode;
const char=String.fromCharCode(charCode);
if(/[a-zA-Z0-9_\-\.@]/.exec(char)){return true;}
return false;
}

以下是具有典型空白符数量的相同脚本。

以下是具有典型空白符数量的相同脚本。

function filterEmailKeys(event) {
  event = event || window.event;
  const charCode = event.charCode || event.keyCode;
  const char = String.fromCharCode(charCode);
  if (/[a-zA-Z0-9_\-\.@]/.exec(char)) {
    return true;
  }
  return false;
}

以下是具有大量空白符的相同脚本。

function filterEmailKeys( evt ) {

    evt = evt || window.event;

    const charCode = evt.charCode || evt.keyCode;
    const char = String.fromCharCode ( charCode );

    if ( /[a-zA-Z0-9_\-\.@]/.exec ( char ) ) {
        return true;
    }

    return false;
  }

注释是源代码的一部分,根据定义 - 不会被执行。

它们允许你在代码中留下注释以帮助其他人理解它。它们还允许你注释掉你想要隐藏在解析器之外但不想删除的代码。

单行注释

双斜杠 // 会将同一行上的所有后续文本转换为注释,这些注释不会被 JavaScript 解释器处理。

// Show a welcome message
alert("Hello, World!")
多行注释

多行注释以 /* 开头,并以相反的 */ 结尾。多行注释不会嵌套。

以下是如何使用不同类型的注释技术的示例。

/* This is a multi-line comment
that contains multiple lines
of commented text. */
let a = 1;
/* commented out to perform further testing
a = a + 2;
a = a / (a - 3); // is something wrong here?
*/
alert('a: ' + a);

/* This comment has two /* but they're both canceled out by */

在许多编程语言中,每个代码语句的末尾都需要分号。在 JavaScript 中,分号的使用是可选的,因为换行符表示语句的结束(除了一些例外)。这被称为 自动分号插入

// the line 
x = a + b;
// is equivalent to:
x = a + b

但是,这些例外可能令人惊讶。[3] 自动分号插入可能会导致难以调试的问题。

a = b + c
(d + e).print()

上面的代码不会被解释为两个语句。由于第二行上的括号,JavaScript 会将上面的代码解释为

a = b + c(d + e).print();

而你可能本意是将其解释为

a = b + c;
(d + e).print();

即使分号是可选的,最好在语句末尾加上分号,以防止出现任何误解。

字面量

[编辑 | 编辑源代码]

字面量是一个硬编码的值。字面量提供了一种在脚本中表达特定值的方法。例如,在等号右边

const myLiteral = "a fixed value";

有几种类型的字面量可用。最常见的是字符串字面量,但还有数字字面量、布尔值、未定义、空值、正则表达式字面量、数组字面量和对象字面量。

对象、布尔值和字符串字面量的示例

const myObject = { name:"value", anotherName:"anotherValue" };
const isClosed = true;
const mayBeWrong = "true";

这些不同类型的详细信息将在 变量和类型 中介绍。

标识符

[编辑 | 编辑源代码]

标识符是数据片段(如变量、数组或函数)的名称。有一些规则

  • 标识符中允许使用字母、美元符号、下划线和数字。
  • 第一个字符不能是数字。

有效标识符的示例

  • u
  • $hello
  • _Hello
  • hello90

1A2B3C 是一个无效的标识符,因为它以数字开头。

“标识符”的一个例子是变量名。它们遵循这样的规则。

  • 可以使用大写和小写字母、下划线和美元符号。
  • 数字可以在第一个字符之后使用。
  • 只要它们分别具有“ID_Start”或“ID_Continue”的 Unicode 属性,就可以在变量名中使用非拉丁字符(如“á”)。[4] 不允许使用特殊字符。
  • 变量名区分大小写:不同的情况意味着不同的名称。
  • 变量不能是保留字。
... 在另一个页面上提供(点击这里)。
  1. 从技术上讲,垂直制表符、零宽度不间断空格以及任何具有“空格分隔符”类别的 Unicode 字符也都算作空白符。[1]

参考资料

[编辑 | 编辑源代码]
华夏公益教科书