JavaScript 简介

尽管 JavaScript 叫作它,但它仅与 Java 相关,因为两者有着一些 语法相似性。JavaScript 在最初开发的语法是 其灵感源自 Java 的语法,称为“LiveScript”启动 于 1995 年推出的 Netscape Navigator 测试版, 这也表明了 Netscape 推出的“实时”解决方案, 。Microsoft 发布了自己的 JavaScript 实施方案, “JScript”安装 Internet Explorer 3.0。

Netscape 将此早期工作提交给 Ecma International 制定并发布技术标准,以正式并详细说明 脚本语言也能被其他浏览器理解。1997 年,Ecma 国际发布了 ECMA-262,对脚本的第一个版本进行了标准化 名为“ECMAScript”ECMAScript 是告知其创建过程的标准 更具体的脚本语言,例如 Microsoft 后来在 现已不再存在的 JScript、Adobe 的 ActionScript 和 JavaScript 本身。

在讨论 Google 产品/服务的特定方面和功能时, JavaScript。“ES5”指的是第一个大调的 在经过多年的全面开发之后,我们于 2009 年制定了 ECMAScript 标准。 “ES6”(或“ES2015”)是 ECMAScript,于 2015 年发布。ES6 之后,新版 ECMAScript 每个版本都有了相应的变化和新增内容 按年份(例如“ES2016”)或“ES2017”。

基本规则

与编译语言不同,JavaScript 不是从用户编写的代码翻译而来 转换成浏览器可识别的形式。脚本会发送到浏览器 以及标记、图片和样式表等资源, 编写形式:以人类可读的 Unicode 字符序列表示, 从左到右、从上到下进行解析。

当 JavaScript 解释器收到脚本时,首先执行 词法分析,解析构成脚本的一长串字符 并将其转换为以下离散输入元素:

  • 令牌
  • 设置控制字符格式
  • 行终止符
  • 评论
  • 空格(几乎 始终表示制表符和空格)。

重新加载或离开浏览器后,脚本结果不会保留 除非您在 脚本。

概括来讲,JavaScript 应用由语句表达式

声明

语句是一种指令单元,由一行或多行代码组成, 代表一项操作。例如,您可以使用以下语句将 赋值给名为 myVariable 的变量:

let myVariable = 4;

myVariable;
> 4

为正确解译,语句必须以分号结尾。不过,这些 在编写 JavaScript 时,并不总是需要分号。一项名为 自动插入分号可让行 如果缺少 则会导致错误。

ASI 是纠错功能,而不是 JavaScript 本身的一个宽松方面。因为 过于依赖这种纠错可能会造成模棱两可的情况, 代码中,您仍然应该以英文分号手动结束每个语句。

块语句

块语句对一个对内任意数量的语句和声明进行分组 大括号 ({})。它让您可以在 JavaScript 只需要一个。

您最常看到代码块语句 控制流语句, 例如 if

if ( x === 2 ) {
  //some behavior;
}

表达式

表达式是生成值的代码单位,因此可以是 在需要值的地方使用2 + 2 是一个表达式,用于生成 值 4

2 + 2;
> 4

“分组运算符”是一对匹配的圆括号,用于 对表达式的某些部分进行分组,以确保将表达式的一部分 计算为一个单元。例如,您可以使用分组运算符 替换运算的数学顺序, 或提高代码的可读性:

2 + 2 * 4;
> 10

( 2 + 2 ) * 4;
> 16

let myVariable = ( 2 + 2 );

myVariable;
> 4

弱输入

JavaScript 是一种弱类型语言,这意味着数据值不需要 被明确标记为特定的数据类型。 与强类型语言不同,JavaScript 可以从 值的上下文,并将值转换为该类型。此过程称为 type coercion

例如,如果向采用强类型语言的字符串值添加数字, 例如 Python,则结果会显示错误:

>>> "1" + 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects

JavaScript 会将数值强制转换为字符串,而不是返回错误 并将这两个值串联起来,这是添加 字符串中的任意值:

"1" + 1;
> "11"

数据类型也可以被显式强制转换。以下示例强制转换 将数值 100 转换为字符串值 "100"(使用 JavaScript 的内置功能) toString 方法:

let myVariable = 100;

typeof myVariable;
> "number"

myVariable = myVariable.toString();
> "100"

typeof myVariable;
> "string"

大小写区分

与 HTML 和大部分 CSS 不同,JavaScript 本身完全区分大小写。 也就是说,您必须始终以一致的方式大写所有字词: 语言中内置的属性和方法与您定义的标识符相关联 。

console.log( "Log this." );
> Log this.

console.Log( "Log this too." );
> Uncaught TypeError: console.Log is not a function
const myVariable = 2;

myvariable;
> Uncaught ReferenceError: myvariable is not defined

myVariable;
> 2

空格符

JavaScript 不区分大小写。这意味着解释器会忽略 使用的空白数量和类型(制表符或空格)。

                     console.log(       "Log this"  );console.log("Log this too");
> "Log this."
> "Log this too."

不过,空格的存在可以作为两个 词法单元:

let x;

[令牌[let] [x] ]

letx;
> Uncaught ReferenceError: letx is not defined

[令牌[letx] ]

如果使用空格来分隔有意义的词法词元,解析器 并忽略空格的数量和类型:

let           x                             =                           2;

[令牌[let] [x] [=] [2] ]

换行符也是如此,不过在某些情况下 过早结束语句会导致问题):

let x
=
2;

[令牌[let] [x] [=] [2] ]

从文体上讲,某些类型的陈述经常占一行:

let x = 1;
let y = 2;

虽然一些语句通常使用多行:

if ( x == 2 ) {
  //some behavior;
}

不过,这些惯例完全是为了便于阅读。JavaScript 以与以下方式解读前面的示例相同:

let x=1;let y=2;
if(x==2){}

因此,我们会使用一套自动化流程 是准备 JavaScript 文件的一种常用步骤 以及许多其他优化措施

在 JavaScript 中使用空白字符很大程度上取决于编写人员和执行 维护者偏好。有多个开发者的 JavaScript 项目 贡献代码通常会建议或强制执行某些空格规范, 确保代码格式保持一致,例如使用制表符或空格来 缩进嵌套语句:

let myVariable = 10;

if ( typeof myVariable === "number" ) {
    console.log( "This variable is a number." );
    if( myVariable > 5 ) {
     console.log( "This variable is greater than five." );
    }
}

> "This variable is a number."
> "This variable is greater than five."

检查您的理解情况

什么是表达式?

产生值的代码单元。
用于说明代码用途的注释。
一组语句和声明。

JavaScript 区分大小写。

正确
错误