JavaScript高级程序设计第四版中文版

  时光荏苒,时间来到了2020年,而我依然是那个菜,即便如此,也总是在内心渴望成为big old。俗话说笨鸟先飞,我并不期待自己能够先飞,但却坚信总会与一天能够飞。也希望能通过这件事情能够在多个方面能够提升自己。本次为连载文章,预计是半个月能更新一章或者两章,这也算立下了一个flag,能够提醒自己即便再忙,也要学习。另外一方面就是,由于本人英语为散装英语,有些地方还是用到了翻译器,可能不是那么准确,也希望能够看到的巨佬能够指出,以便能够及时改进和提升。最后,JavaScript高级程序设计第四版目前国内好像还是图灵的人在弄,如果侵权,请及时提出以便删除,该系列不会作为商业用途,仅供学习参考用。

  前两章与第三版并没有什么大的改动,于是我便跳过了。

第一部分JavaScript基础

本章内容:


  1. 复习基础语法
  2. 数据类型的使用
  3. 变量声明
  4. 函数讲解

  任何语言的核心都是描述它最底层上应该如何去运行,这种描述通常表现为定义语法、运算符、数据类型和内置功能 等可以去提供构建复杂的解决方案。 ECMA-262以一种称为ECMAScript的伪语言的形式为JavaScript定义了所有这些信息。
  ECMA-262第五版中定义的ECMAScript是在 网络浏览器。第六版是下一个将在浏览器中实现的版本,截止到 2017年,大多数主流浏览器已经基本或完全实现了该规范。因为这个原因, 以下信息主要基于第六版中定义的ECMAScript。

关于语法

ECMAScript的语法大量借用了C和其他类似C的语言,如Java和Perl。 熟悉这类语言的开发人员应该很容易掌握 ECMAScript的语法更松散。


关于大小写

  首先需要理解一个概念,所有的内容都是区分大小写的;变量、函数名、运算符等都是区分大小写的 这样就很容易的去区分出它们test于Test是不同的。类似的情况还有typeof不能用来当作函数的名称, 因为typeof是一个关键字。 但是在后面一节中typeof是一个有效的函数名。


标识符

  标识符是变量、函数、属性或者函数的名称。标识符可以是下列形式的一个或多个字符:1、第一个字母必须是字母、下划线(_)或者$符。2、所有其他字符可以是字母、下划线、$符或者数字。

标识符中的字母可以包括扩展的Ascll或Unicode字母字符,例如 À 和 Æ ,但是不建议这样使用

  按照习惯,ECMScript标识符使用驼峰式命名法,第一个字符是小写,后面每个单词的第一个字母大写 例如:firstSecond
myCar
doSomethingImportant

虽然没有严格要求这样,但是我们还是应该按照ECMScript遵守这样的命名方式。

注意:关键字、保留字、truefalsenull不能用作标识符。请参照后续关键字和保留字部分


注释

  ECMAScript对单行和块注释都使用C样式的注释。单行注释 以两个正斜杠字符开头,例如:
// 这是一个双斜杠注释

块注释以正斜杠和星号(/*)开头,以相反的(*/)结尾,如 这个例子:

/* 这是一个块注释 */


严格模式

  ECMAScript 5引入了严格模式的概念,严格模式下的JavaScript是一种不同的解析和执行模式, 其中处理了ECMAScript 3中的一些不稳定行为和一些不安全的因素。如果要开启严格模式,则需要在顶端写上:
"use strict";
看起来像是普通的字符串,但是这是一个标识,它会告诉JavaScript引擎,这段代码需要转换成严格模式。 这里之所以这样写,是为了避免对ECMScript 3造成一些不必要的影响。
你还可以在指定的函数体中使用严格模式:
function doSomething() {
"use strict"
// function body
}
严格模式改变了许多JavaScript的执行过程,为了区分,在本书中,所有的严格模式都将会指出。


声明

  ECMAScript中以分号标识结束,但是也可以省略不写,如下所示:
let sum = a +b // 这样写也是没有问题的,但是不推荐这样做
let diff = a - b; // 推荐写法

  即使在语句末尾不需要分号,也应该始终包含分号。写上分号有助于防止遗漏错误, 例如没有完成键入的内容,并允许开发人员通过删除额外的空格来压缩ECMAScript代码 (当行不以分号结尾时,这种压缩会导致语法错误)。在某些情况下, 包含分号还可以提高性能,因为语法分析器会通过在分号所属的位置插入分号来更正语法错误
通过使用C样式语法,可以将多个语句组合到一个代码块中,从左大括号({)开始,到右大括号(})结束:
if (test) {
test = false;
console.log(test);
}

  控制语句(如if)只在执行多个语句时需要代码块。但是,最好始终将代码块与控制语句一起使用,即使只有一条语句要执行,如下例所示:
// 这样写是没问题的,但是很容易出错,所以不推荐这样写
if (test)
console.log(test);
// 推荐写法
if (test) { console.log(test) }

对控制语句使用代码块可以使意图更清晰,并且在需要进行更改时出错的可能性更小


关键字和保留词

  ECMA-262描述一组具有特定用途的保留关键字,例如指示控制语句的开始或结束或执行特定操作。 根据规则,关键字是保留的,不能用作标识符或属性名。ECMA-262第六版的完整关键字列表如下:
break do in typeof
case
else instanceof var
catch
export new void
class
extends return while
const
finally super with
continue
for switch yield
debugger
function this default
if
throw delete import
try

  规范还提出了一组将来不能用作标识符或属性名的保留字。尽管保留词在语言中没有任何特定用法,但它们保留了作为关键字供将来使用。
以下是ECMA-262第六版中定义的未来保留字的完整列表:
一直保留的:
enum
以严格模式保留:
implements、 package 、 public 、 interface
protected 、 static、 let 、 private
Reserved、 in
在代码块中保留的:
await
这些词仍然不能用作标识符,但现在可以用作对象中的属性名。 一般来说,最好避免同时使用关键字和保留字作为标识符和属性名, 以确保向下和向上的ECMAScript版本兼容。


变量

  ECMAScript变量是松散类型的,这意味着变量可以保存任何类型的数据。 每个变量只是一个值的命名占位符。 有三个关键字可用于声明变量:var(在所有ECMAScript版本中都可用)和const和let(在ECMAScript 6中引入)。


关键字:var

如果要使用var定义变量,前面写var(注意:var是一个关键字),后面跟变量名(前面描述的标识符),比如:
var message;
这段代码定义了一个名为message,它可以用来保存任何值。(如果不进行初始化,则保留未定义的特殊值 ,这将在下一节中讨论)。ECMAScript实现变量初始化,因此可以同事定义变量并设值,例如:

var message = "hi";
这里我们将message变量定义为包含字符串值"hi",执行此初始化不会将变量标记为字符串类型;它只是为变量赋值。 我们任然可以改变存储在变量中的值或者更改值得类型,例如:
var message = "hi"; message = 100; // 这样做是可以的,但是不推荐这样做
在这个列子中,我们先将变量message的初始值定义为"hi",随后被数值100覆盖,尽管我们不建议这样做,但是在ECMAScript中这样做是可以的


变量声明的作用域

  需要注意的是,使用var运算符定义变量会使其成为定义变量的函数作用域的局部变量。 例如,使用var定义函数内部的变量意味着变量在函数退出时被销毁,例如:
function test() { //
var message = "hi"; //
// 局部变量
}
test();
console.log(message); // message 未定义!

  在这里,我们在test()函数中使用var声明了一个名为message的变量并初始化了它的值, 紧接着,变量被销毁,因此本例中的最后一行会在控制台中报错。 但是,只需省略var运算符,就可以全局定义变量,如下所示:
function test() { //
message = "hi"; //全局变量
// 局部变量
}
test();
console.log(message); // "hi"

通过从示例中删除var运算符,message变量变为全局变量。一旦调用函数test(),变量就会被定义,并在执行后可在函数外部访问。

注意:虽然可以通过省略var运算符来定义全局变量,但不建议使用这种方法。局部定义的全局变量很难维护,并且会导致混淆。当未声明的变量被赋值时,严格模式下会报引用错误。

  如果需要定义多个变量,可以使用单个语句来完成,用逗号将每个变量(和可选初始化)分隔,例如:
var message = "hi",
    found = false,
    age = 18,

这里,定义并初始化了三个变量。 由于ECMAScript是松散类型的,所以可以将使用不同数据类型的变量初始化组合到单个语句中。 虽然不需要插入换行符和缩进变量,但这有助于提高可读性。 在严格模式下运行时,变量不能定义名为eval或arguments(虽然没有加入关键字或者保留字,但是这样做以然会导致语法错误)。

 

 

猜你喜欢

转载自www.cnblogs.com/yang656/p/12330966.html