1.第一部分:javascript基础知识回顾

1.1 JavaScript 回顾
1.1.1 变量和数据类型
JavaScript 是一种动态类型语言,它使用变量来存储和操作数据。在 JavaScript 中,变量是通过关键字varletconst来声明的。数据类型在 JavaScript 中分为两大类:原始数据类型和引用数据类型。

原始数据类型(Primitive data types)包括:

  1. 布尔值(Boolean):表示真或假,只有两个可能值:truefalse
  2. 数字(Number):表示数字,包括整数和浮点数。例如:423.14等。
  3. 字符串(String):表示文本数据,由一串字符组成。例如:"Hello World"'JavaScript'等。
  4. 空值(Null):表示一个空值。
  5. 未定义(Undefined):表示一个未定义的值。
  6. 符号(Symbol)(ES6 引入):表示唯一的标识符。

引用数据类型(Reference data types)包括:

  1. 对象(Object):表示复杂的数据结构,可以包含多个键值对。例如:{ name: 'John', age: 30 }
  2. 数组(Array):表示一个有序的数据集合。例如:[1, 2, 3, 4]
  3. 函数(Function):表示可重复使用的代码块。例如:function add(a, b) { return a + b; }
  4. 日期(Date):表示日期和时间。
  5. 正则表达式(RegExp):表示匹配某个模式的文本。

在 JavaScript 中,变量的数据类型是动态的,也就是说可以在运行时改变一个变量的数据类型。例如,一个变量一开始可以是一个数字,然后在后续代码中被赋值为字符串。变量的数据类型可以使用typeof运算符来检测。

下面是一些关于变量和数据类型的示例代码:

// 声明一个变量并初始化
var age = 25;

// 使用typeof检测变量的数据类型
console.log(typeof age); // 输出: "number"

// 改变变量的数据类型
age = "twenty-five";
console.log(typeof age); // 输出: "string"

// 声明一个字符串变量
var name = "John";

// 声明一个布尔变量
var isStudent = true;

// 声明一个数组变量
var numbers = [1, 2, 3, 4, 5];

// 声明一个对象变量
var person = {
  name: "John",
  age: 30,
};

// 声明一个函数变量
var add = function (a, b) {
  return a + b;
};

这些是 JavaScript 中的一些基本的变量和数据类型。可以根据具体的需求选择适当的数据类型来存储和操作数据。
1.1.2 运算符和表达式
JavaScript 提供了丰富的运算符和表达式,用于执行各种计算和操作。下面是一些常见的 JavaScript 运算符和表达式的示例:

  1. 算术运算符(Arithmetic Operators):
  • 加法:+,用于两个值的相加。
  • 减法:-,用于两个值的相减。
  • 乘法:*,用于两个值的相乘。
  • 除法:/,用于两个值的相除。
  • 模运算(取余):%,返回两个值相除的余数。
  • 自增:++,将变量的值增加 1。
  • 自减:--,将变量的值减少 1。
  1. 赋值运算符(Assignment Operators):
  • 简单赋值:=,将一个值赋给一个变量。
  • 复合赋值:例如,+=-=*=/=等,将运算符右侧的值与变量的值进行运算,并将结果赋给变量。
  1. 比较运算符(Comparison Operators):
  • 相等:==,检查两个值是否相等。
  • 不相等:!=,检查两个值是否不相等。
  • 全等:===,检查两个值是否类型和值都相等。
  • 不全等:!==,检查两个值是否类型或值不相等。
  • 大于:>,检查左侧的值是否大于右侧的值。
  • 小于:<,检查左侧的值是否小于右侧的值。
  • 大于等于:>=,检查左侧的值是否大于或等于右侧的值。
  • 小于等于:<=,检查左侧的值是否小于或等于右侧的值。
  1. 逻辑运算符(Logical Operators):
  • 逻辑与:&&,如果两个条件都为真,则返回真。
  • 逻辑或:||,如果两个条件中有一个为真,则返回真。
  • 逻辑非:!,将一个条件取反。
  1. 条件运算符(Conditional (Ternary) Operator):
  • 三元运算符:condition ? expr1 : expr2,根据条件的真假返回不同的值。
  1. 字符串拼接运算符(String Concatenation Operator):
  • 字符串拼接:+,将两个字符串连接起来。
  1. 类型运算符(Type Operators):
  • typeof:返回一个值的数据类型。
  • instanceof:检查对象是否属于某个特定的类。

这些只是一些常见的 JavaScript 运算符和表达式示例。JavaScript 还提供了其他运算符和表达式,用于更复杂
1.1.3 控制流程和条件语句
JavaScript 提供了各种控制流程和条件语句,用于根据不同的条件执行不同的代码块。以下是一些常见的控制流程和条件语句:

  1. 条件语句(Conditional Statements):
  • if语句:用于根据条件执行代码块。
if (condition) {
  // 如果条件为真,则执行这里的代码
} else {
  // 如果条件为假,则执行这里的代码
}
  • if...else if...else语句:用于多个条件的判断。
if (condition1) {
  // 如果条件1为真,则执行这里的代码
} else if (condition2) {
  // 如果条件2为真,则执行这里的代码
} else {
  // 如果所有条件都为假,则执行这里的代码
}
  • switch语句:用于基于不同的情况执行代码块。
switch (expression) {
  case value1:
    // 当表达式等于value1时执行这里的代码
    break;
  case value2:
    // 当表达式等于value2时执行这里的代码
    break;
  default:
    // 如果表达式的值与任何case都不匹配,则执行这里的代码
    break;
}
  1. 循环语句(Loop Statements):
  • for循环:用于重复执行代码块一定次数。
for (initialization; condition; increment) {
  // 在每次循环迭代中执行这里的代码
}
  • while循环:用于在满足条件时重复执行代码块。
while (condition) {
  // 只要条件为真,就一直执行这里的代码
}
  • do...while循环:先执行代码块,然后再检查条件,如果满足条件,则继续执行。
do {
  // 执行这里的代码
} while (condition);
  • break语句:用于跳出循环,终止循环的执行。
for (var i = 0; i < 10; i++) {
  if (i === 5) {
    break; // 当i等于5时跳出循环
  }
  // 执行这里的代码
}
  • continue语句:用于跳过当前循环的剩余代码,并继续下一次循环。
for (var i = 0; i < 10; i++) {
  if (i === 5) {
    continue; // 当i等于5时跳过当前循环的剩余代码
  }
  // 执行这里的代码
}

以上是一些常见的 JavaScript 控制流程和条件语句示例。它们使
1.1.4 函数和作用域
在 JavaScript 中,函数是可重复使用的代码块,它接受输入参数并返回一个值。函数允许您将代码逻辑组织为独立的单元,使其更易于理解、维护和重用。

以下是定义函数的一般语法:

function functionName(parameter1, parameter2, ...) {
  // 函数体,包含要执行的代码
  return result; // 可选的返回值
}
  • functionName 是函数的名称,可以根据需求自定义。
  • parameter1, parameter2, … 是函数的参数列表,用于接收传递给函数的值。
  • 函数体包含要执行的代码,可以访问参数和在函数内部声明的变量。
  • return 语句可用于指定函数的返回值,它将函数调用的结果返回给调用方。

函数的调用通过函数名加括号完成,可以传递实际的参数值:

var result = functionName(argument1, argument2, ...);

JavaScript 还具有函数表达式的方式来定义函数:

var functionName = function(parameter1, parameter2, ...) {
  // 函数体,包含要执行的代码
  return result; // 可选的返回值
};

函数表达式将函数赋值给一个变量,可以像其他变量一样使用该变量。

作用域(Scope)是指变量在代码中的可访问性范围。JavaScript 具有函数作用域和块级作用域。

  • 函数作用域:在函数内部声明的变量仅在函数内部可见。函数内部的变量可以访问函数的参数和外部函数中声明的变量,但外部函数无法访问函数内部的变量。
  • 块级作用域:在使用letconst关键字声明的变量具有块级作用域,它们只在最近的包含块(通常是由大括号{}定义的代码块)内可见。

以下是一个简单的示例,演示了函数和作用域的概念:

function greet(name) {
  var message = "Hello, " + name; // 在函数作用域内声明的变量
  console.log(message);
}

greet("John"); // 输出: "Hello, John"
console.log(message); // 报错,message不在全局作用域内可见

if (true) {
  let count = 5; // 在块级作用域内声明的变量
  console.log(count); // 输出: 5
}

console.log(count); // 报错,count不在全局作用域内可见

这是函数和作用域在 JavaScript 中的基本概念。使用函数和适当的作用域,可以组织和管理代码,提高可重用性和可维护性。
1.2 ECMAScript 新特性回顾
1.2.1 ES6 的变化和新增功能
ECMAScript 6(ES6),也称为 ECMAScript 2015,是 JavaScript 的一个重要版本,引入了许多新的功能和语法改进。下面是 ES6 中的一些主要变化和新增功能:

  1. 块级作用域(Block Scope):引入letconst关键字,允许在块级作用域内声明变量,解决了使用var声明的变量提升问题。
  2. 箭头函数(Arrow Functions):提供了一种更简洁的函数定义语法,并且自动绑定函数体内的this值。
  3. 默认参数(Default Parameters):函数参数可以指定默认值,简化了函数的使用,当未提供参数或传递undefined时将使用默认值。
  4. 扩展操作符(Spread Operator):通过...语法可以将数组或对象展开,可以用于函数调用、数组字面量、对象字面量等场景。
  5. 解构赋值(Destructuring Assignment):可以通过模式匹配的方式从数组或对象中提取值并赋给变量,简化了代码的编写。
  6. 模板字面量(Template Literals):使用反引号(`)包围字符串,可以在字符串中插入变量和表达式,支持多行字符串和字符串插值。
  7. 类(Classes):引入了类的概念,提供了更简洁的面向对象编程方式,包括构造函数、继承、方法定义等。
  8. 模块化(Modules):引入了模块化的概念,可以通过exportimport关键字在不同模块之间共享代码。
  9. 迭代器和生成器(Iterators and Generators):引入了迭代器和生成器的概念,简化了迭代过程和异步编程。
  10. Promise:提供了一种更强大的异步编程模式,解决了回调地狱问题,通过链式调用和错误处理机制来处理异步操作。
  11. 新的数据结构:引入了MapSetWeakMapWeakSet等新的数据结构,提供了更灵活和高效的数据存储方式。
  12. 箭头函数和模板字面量:增强了字符串和函数的表达能力,提供了更简洁的语法。

这些只是 ES6 中的一些主要变化和新增功能。ES6 引入的这些功能提高了 JavaScript 的可读性、可维护性和开发效率,并且被广泛支持和采用。
1.2.2 ES7、ES8 和 ES9 的特性
以下是 ES7(ECMAScript 2016)、ES8(ECMAScript 2017)和 ES9(ECMAScript 2018)的一些主要特性:

ES7(ECMAScript 2016):

  1. Array.prototype.includes():提供了一种更简洁的方式来确定数组中是否包含特定的元素。
  2. 指数操作符(Exponentiation Operator):引入了双星号(**)作为指数操作符,用于计算一个数的幂。

ES8(ECMAScript 2017):

  1. 字符串填充(String Padding):提供了字符串填充的功能,通过String.prototype.padStart()String.prototype.padEnd()方法,可以在字符串的开头或结尾添加指定数量的字符。
  2. 对象属性值遍历(Object.values()、Object.entries()):引入了Object.values()Object.entries()方法,可以分别获取对象的值和键值对的迭代器。
  3. 异步函数(Async Functions):引入了asyncawait关键字,简化了使用 Promise 处理异步操作的语法,使得异步代码更加清晰和易读。
  4. 共享内存和原子操作(Shared Memory and Atomics):引入了共享内存和原子操作的支持,使得在多个 JavaScript 线程之间共享数据更加高效和安全。

ES9(ECMAScript 2018):

  1. 异步迭代器(Asynchronous Iteration):引入了异步迭代器的概念,通过Symbol.asyncIteratorfor-await-of语法,可以处理异步迭代的情况。
  2. Promise.finally():引入了Promise.prototype.finally()方法,可以指定在 Promise 完成或拒绝后,无论如何都要执行的回调函数。
  3. Rest/Spread 属性(Rest/Spread Properties):引入了对象的 Rest 和 Spread 属性,允许使用...语法将对象的剩余属性组合成一个新的对象。
  4. 正则表达式命名捕获组(Regular Expression Named Capture Groups):在正则表达式中,引入了命名捕获组的语法,使得匹配的结果可以以键值对的形式访问。

这些是 ES7、ES8 和 ES9 中的一些主要特性。每个版本都引入了新的语言功能和改进,旨在提高 JavaScript 的开发体验和功能性。请注意,这些特性在不同的 JavaScript 环境中可能有不同的支持程度,因此在使用这些特性时需要注意目标平台的兼容性。

你可能感兴趣的:(JavaScript,javascript,开发语言,ecmascript)