尽管 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 区分大小写。