JavaScript&TypeScript 学习总结

本文详细总结了JavaScript和TypeScript的核心概念,包括JavaScript的基本书写规则、数据类型、运算符、遍历语句、函数、对象和数组,以及TypeScript的变量、函数、类、模块等特性,强调了类型系统和面向对象编程在TypeScript中的重要性。
摘要由CSDN通过智能技术生成

目录

一、JavaScript学习总结

1 概念

2 基本书写规则

2.1 大小写敏感

2.2 标识符命名规则

2.3 注释

2.4 变量声明

2.5 语句结束

2.6 代码块

2.7 字面量

2.8 引号

3 数据类型

3.1 基本数据类型

3.2 复杂数据类型

4 运算符

4.1 算数运算符

4.2 赋值运算符

4.3 比较运算符

4.4 逻辑运算符

4.5 字符串运算符

5 遍历语句

5.1 for语句

5.2 for...in语句

5.3 for...of语句

5.4 forEach语句

5.5 while语句

5.6 do...while语句

6 函数

6.1 函数定义

6.2 函数调用

6.3 返回值

6.4 参数

6.5 默认参数

6.6 匿名函数

7 对象

8 数组

二、TypeScript学习总结

1 概念

2 变量

3 函数

3.1 声明函数

3.2 可选参数

3.3 默认参数

3.4 剩余参数

4 类

4.1 定义

4.2 封装

4.3 属性存取器

4.4 静态属性

4.5 this

4.6 继承

4.7 重写

4.8 抽象类

5 模块

三、学习心得


一、JavaScript学习总结

1 概念

JavaScript(简称“JS”)是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式、函数式编程范式。

2 基本书写规则

2.1 大小写敏感

JavaScript是区分大小写的,所以变量名、函数名等标识符要与其使用处保持一致的大小写。

2.2 标识符命名规则

标识符可以是字母、数字、下划线(_)和美元符号($)的组合。但是,标识符不能以数字开头。

2.3 注释

可以使用双斜线(//)来写单行注释,也可以使用斜线和星号(/* */)来写多行注释。

2.4 变量声明

在使用变量之前,需要使用关键字var、let或const来声明变量。其中,var是ES5之前的声明方式,let和const是ES6引入的新的声明方式。

2.5 语句结束

在JavaScript中,每条语句的结束通常使用分号(;)来表示,但是在某些情况下,分号可以省略。为了代码的可读性和维护性,建议在每条语句的末尾加上分号。

2.6 代码块

使用花括号({})来定义一个代码块,代码块用于组织一组相关的语句。注意,JavaScript中的代码块不会创建自己的作用域。

2.7 字面量

JavaScript中的字面量是直接使用的常量值,如字符串字面量、数字字面量、布尔字面量等。

2.8 引号

在JavaScript中,字符串可以使用单引号('')或双引号("")括起来,两者没有区别。但是,如果字符串中包含引号,需要使用不同类型的引号进行嵌套。

3 数据类型

JavaScript数据类型包括基本数据类型(5种)和复杂数据类型(3种)。

3.1 基本数据类型

数字(Number):整数和浮点数。
字符串(String):一串文本。
布尔值(Boolean):true或false。
空值(Null):表示空或不存在的值。
未定义(Undefined):表示未赋值的变量。

3.2 复杂数据类型

对象(Object):一组键值对的集合。
数组(Array):有序的值的列表。
函数(Function):可重复使用的代码块。

4 运算符

JavaScript提供了多种运算符,用于进行数学计算、逻辑判断和字符串操作等。

4.1 算数运算符

加法(+):将两个数相加。
减法(-):将一个数减去另一个数。
乘法(*):将两个数相乘。
除法(/):将一个数除以另一个数。
求余(%):取得两个数相除后的余数。
自增(++):将变量的值增加1。
自减(--):将变量的值减少1。

4.2 赋值运算符

等于(=):将一个值赋给一个变量。
加等于(+=):将一个值加到变量上,并将结果赋给变量。
减等于(-=):将一个值从变量上减去,并将结果赋给变量。
乘等于(*=):将一个值乘到变量上,并将结果赋给变量。
除等于(/=):将一个值除以变量,并将结果赋给变量。
求余等于(%=):将一个值取余变量,并将结果赋给变量。

4.3 比较运算符

相等(==):检查两个值是否相等。
不相等(!=):检查两个值是否不相等。
全等(===):检查两个值是否类型和值都相等。
不全等(!==):检查两个值是否类型或值有一个不相等。
大于(>):检查一个值是否大于另一个值。
小于(<):检查一个值是否小于另一个值。
大于等于(>=):检查一个值是否大于等于另一个值。
小于等于(<=):检查一个值是否小于等于另一个值。

4.4 逻辑运算符

与(&&):逻辑与,两个条件都为真时返回真。
或(||):逻辑或,两个条件有一个为真时返回真。
非(!):逻辑非,取反一个条件的值。

4.5 字符串运算符

连接(+):将两个字符串连接起来。

5 遍历语句

在JavaScript中,有多种遍历语句可用于遍历数组、对象和字符串。这些遍历语句可根据不同的需求选择使用,以便在JavaScript中对数据进行遍历和处理。

5.1 for语句

用于遍历数组或字符串中的每个元素,或者执行一定次数的循环。

   for (let i = 0; i < array.length; i++) {
       // 执行循环体的代码
   }

5.2 for...in语句

用于遍历对象的可枚举属性。

   for (let key in object) {
       // 执行循环体的代码
   }

5.3 for...of语句

用于遍历可迭代对象(如数组、字符串)的每个元素。

   for (let element of iterable) {
       // 执行循环体的代码
   }

5.4 forEach语句

用于遍历数组的每个元素,并对每个元素执行回调函数。

   array.forEach(function(element) {
       // 执行回调函数的代码
   });

5.5 while语句

在指定条件为真时重复执行一段代码。

   while (condition) {
       // 执行循环体的代码
   }

5.6 do...while语句

类似于while循环,但是至少会执行一次循环体。

   do {
       // 执行循环体的代码
   } while (condition);

6 函数

在JavaScript中,函数是一种可重复使用的代码块,用于执行特定的任务或计算。函数在JavaScript中扮演着重要的角色,它们可以提高代码的可维护性和重用性,并允许我们将任务分解为更小的部分进行处理。

6.1 函数定义

使用关键字function来定义函数,后跟函数名和一对圆括号,圆括号中可以包含参数(可选)。函数体由一对花括号{}包围,用于包含函数执行的代码。

function functionName(parameter1, parameter2) {
    // 函数体代码
}

6.2 函数调用

通过函数名和一对圆括号来调用函数,圆括号中可以传递参数的值(可选)。

functionName(argument1, argument2);

6.3 返回值

函数可以通过return语句返回一个值。调用函数时,可以将返回值赋给一个变量,或者直接使用返回值。

function functionName() {
    // 函数体代码
    return value;
}
let result = functionName();

6.4 参数

函数可以接受参数,参数用于接收调用函数时传递的值。可以在函数体中使用参数进行计算或处理。

function functionName(parameter1, parameter2) {
    // 函数体代码
}

6.5 默认参数

在函数定义时,可以为参数设置默认值,如果调用函数时没有传递该参数,将使用默认值。

function functionName(parameter = defaultValue) {
    // 函数体代码
}

6.6 匿名函数

可以创建没有函数名的函数,这种函数通常作为回调函数或立即执行函数使用。

let functionName = function(parameter1, parameter2) {
    // 函数体代码
}

7 对象

JavaScript中的对象是由键值对组成的集合。每个键值对中,键是一个字符串或符号,值可以是任意的数据类型,包括数字、字符串、布尔值、数组、函数等。对象允许我们将相关的数据和功能组织在一起。

对象的定义可以使用花括号{},并在其中指定键值对。例如:

let person = {
  name: "John",
  age: 25,
  isStudent: true,
  hobbies: ["reading", "sports"],
  greet: function() {
    console.log("Hello!");
  }
};

在上面的例子中,我们定义了一个名为person的对象,它有四个键值对。name键的值是"John",age键的值是25,isStudent键的值是true,hobbies键的值是一个包含两个元素的数组,greet键的值是一个函数。

要访问对象的属性或调用对象的方法,可以使用点符号或方括号符号。例如:

console.log(person.name); // 输出 "John"
console.log(person.age); // 输出 25
console.log(person.hobbies[0]); // 输出 "reading"
person.greet(); // 输出 "Hello!"

还可以动态地添加、修改或删除对象的属性。例如:

person.gender = "male"; // 添加一个新属性
person.age = 26; // 修改属性的值
delete person.isStudent; // 删除属性

通过对象,我们可以很方便地组织和操作相关的数据和功能。对象是JavaScript中非常重要的概念之一,深入理解对象对于编写复杂的JavaScript程序至关重要。

8 数组

JavaScript中的数组是一种特殊的对象,用于存储一组有序的元素。数组可以包含任意类型的数据,包括数字、字符串、布尔值、对象、函数等。

要创建一个数组,可以使用方括号[],并在其中列出数组的元素。例如:

let colors = ["red", "green", "blue"];
let numbers = [1, 2, 3, 4, 5];
let mixed = [true, "hello", 123, {name: "John"}];

数组的元素可以使用索引访问,索引从0开始。例如:

console.log(colors[0]); // 输出 "red"
console.log(numbers[2]); // 输出 3
console.log(mixed[1]); // 输出 "hello"

可以使用数组的length属性获取数组的长度,即元素的个数。例如:

console.log(colors.length); // 输出 3
console.log(numbers.length); // 输出 5
console.log(mixed.length); // 输出 4

数组还提供了一些方法来操作和处理数组。例如,可以使用push()方法向数组末尾添加新元素,使用pop()方法删除并返回数组的最后一个元素,使用splice()方法在指定位置插入或删除元素等等。

colors.push("yellow"); // 在数组末尾添加新元素
numbers.pop(); // 删除并返回数组的最后一个元素
mixed.splice(1, 1); // 删除索引为1的元素

数组是JavaScript中非常常用的数据结构,它提供了很多方便的方法来操作和处理数据。了解和熟悉数组的使用对于编写JavaScript代码非常重要。

二、TypeScript学习总结

1 概念

TypeScript是微软开发的一个开源的编程语言,通过在JavaScript的基础上添加静态类型定义构建而成。TypeScript通过TypeScript编译器或Babel转译为JavaScript代码,可运行在任何浏览器,任何操作系统。

2 变量

在TypeScript里,通常使用let,const来定义变量,而不用var

let user='Jerry'

3 函数

TypeScript中函数的书写与JavaScript基本相同,但可以使用类型注解来指定参数的类型和返回值的类型。

3.1 声明函数

function add(a: number, b: number): number {
  return a + b;
}

在这个例子中,函数`add`接受两个参数`a`和`b`,它们的类型都是`number`,并且函数返回值的类型也是`number`。

3.2 可选参数

function sayHello(name: string, age?: number): void {
  console.log("Hello, " + name);
  if (age) {
    console.log("You are " + age + " years old.");
  }
}

在这个例子中,函数`sayHello`有两个参数,`name`是必需的,而`age`是可选的。如果传递了`age`参数,函数会输出年龄信息;如果没有传递`age`参数,函数只输出姓名。

3.3 默认参数

function sayHello(name: string, age: number = 18): void {
  console.log("Hello, " + name);
  console.log("You are " + age + " years old.");
}

在这个例子中,函数`sayHello`有两个参数,`name`是必需的,而`age`是默认参数,默认值为18。如果没有传递`age`参数,函数会使用默认值。

3.4 剩余参数

function greet(greeting: string, ...names: string[]): void {
  console.log(greeting);
  for (let name of names) {
    console.log("Hello, " + name);
  }
}

在这个例子中,函数`greet`有一个必需的参数`greeting`和一个剩余参数`names`,剩余参数用来接收任意数量的参数。函数会输出问候语,并逐个输出姓名。

4 类

4.1 定义

TypeScript是一种面向对象的编程语言,它支持类的概念。类是一种模板,用于创建具有相同属性和方法的对象。在TypeScript中,可以使用关键字`class`来定义一个类。下面是一个简单的示例:

class Person {
  // 属性
  name: string;
  age: number;

  // 构造函数
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  // 方法
  sayHello() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

// 创建对象
const person1 = new Person("Fengfeng", 18);
person1.sayHello(); // 输出:Hello, my name is Fengfeng and I am 18 years old.

在上面的示例中,我们定义了一个名为`Person`的类,它有两个属性`name`和`age`,以及一个构造函数`constructor`用于初始化这些属性。类还有一个方法`sayHello`,用于打印出个人信息。我们通过`new`关键字创建了一个`Person`对象,并调用了`sayHello`方法。

4.2 封装

在TypeScript中,封装是面向对象编程的一个重要概念。它允许我们将数据和方法包装在一个类中,并通过访问修饰符来控制对类的成员的访问权限。

TypeScript提供了三种访问修饰符:public、private和protected。

- public修饰符:公有修饰符,可以在类的内部和外部访问。
- private修饰符:私有修饰符,只能在类的内部访问。
- protected修饰符:受保护的修饰符,可以在类的内部和子类中访问。以下是一个简单的封装示例:

class Person {
  private name: string;
  protected age: number;
  public gender: string;

  constructor(name: string, age: number, gender: string) {
    this.name = name;
    this.age = age;
    this.gender = gender;
  }

  public getName(): string {
    return this.name;
  }

  private getAge(): number {
    return this.age;
  }

  protected getGender(): string {
    return this.gender;
  }
}

let person = new Person("Fengfeng", 18, "male");
console.log(person.getName()); // 可以访问公有方法
console.log(person.getAge()); // 报错,私有方法不能在类的外部访问
console.log(person.getGender()); // 报错,受保护方法不能在类的外部访问
console.log(person.name); // 报错,私有属性不能在类的外部访问
console.log(person.age); // 报错,受保护属性不能在类的外部访问
console.log(person.gender); // 可以访问公有属性

在上面的示例中,name属性和getAge方法被声明为private,只能在Person类的内部访问。age属性和getGender方法被声明为protected,可以在Person类的内部和子类中访问。gender属性被声明为public,可以在任何地方访问。

通过封装,我们可以隐藏类的内部实现细节,提供对外部使用者的简化接口,同时也提高了代码的安全性。

4.3 属性存取器

通过属性存取器,我们可以对属性的访问进行更多的控制,例如在get方法中添加一些逻辑来处理属性的返回值,在set方法中添加一些校验逻辑来限制属性的赋值范围等。这样可以提高代码的可维护性和安全性。

属性存取器由get和set关键字定义,用于获取和设置属性的值。下面是一个简单的示例:

class Person {
  private _name: string;

  get name(): string {
    return this._name;
  }

  set name(value: string) {
    this._name = value;
  }
}

const person = new Person();
person.name = "Fengfeng"; // 通过setter设置属性的值
console.log(person.name); // 通过getter获取属性的值

在上面的示例中,我们定义了一个Person类,其中有一个私有属性_name。通过定义get和set方法,我们可以通过person.name来访问和修改_name属性的值。get方法用于获取属性的值,而set方法用于设置属性的值。

4.4 静态属性

静态属性可以用于存储与类相关的共享数据,它们在整个类的实例之间是共享的。可以在静态属性中存储一些常量值、全局配置等。在TypeScript中,可以使用static关键字来定义静态属性。静态属性是属于类本身而不是类的实例的属性。

下面是一个示例:

class MyClass {
  static myStaticProperty: string = "Hello, static property!";
}

console.log(MyClass.myStaticProperty); // 输出: Hello, static property!

在上面的示例中,我们定义了一个名为MyClass的类,并在类中使用static关键字定义了一个名为myStaticProperty的静态属性。我们可以直接通过类名来访问静态属性,而不需要创建类的实例。

4.5 this

在类中,使用this表示当前对象

4.6 继承

在TypeScript中,继承是通过使用关键字extends来实现的。一个类可以继承另一个类的属性和方法。被继承的类称为父类或基类,继承的类称为子类或派生类。

下面是一个简单的示例:

class Animal {
  name: string;

  constructor(name: string) {
    this.name = name;
  }

  move(distance: number = 0) {
    console.log(`${this.name} moved ${distance}m.`);
  }
}

class Dog extends Animal {
  bark() {
    console.log("Woof! Woof!");
  }
}

const dog = new Dog("Buddy");
dog.bark(); // 输出 "Woof! Woof!"
dog.move(10); // 输出 "Buddy moved 10m."

在上面的例子中,Animal类有一个属性name和一个方法move。Dog类通过extends关键字继承了Animal类,因此它可以访问和使用Animal类的属性和方法。Dog类还添加了一个额外的方法bark。通过创建Dog类的实例,我们可以调用bark方法和继承的move方法。

4.7 重写

在TypeScript中,可以通过在子类中重写父类的方法来实现方法的重写。重写方法的过程与JavaScript中的重写方法类似,只是需要使用override关键字来标记要重写的方法。

下面是一个示例,展示了如何在TypeScript中进行方法的重写:

class Animal {
  constructor(name: string) {
    this.name = name;
  }

  move(distance: number = 0) {
    console.log(`${this.name} moved ${distance} meters.`);
  }
}

class Dog extends Animal {
  constructor(name: string) {
    super(name);
  }

  move(distance: number = 5) {
    console.log(`${this.name} moved ${distance} meters with four legs.`);
  }
}

const animal = new Animal("Animal");
const dog = new Dog("Dog");

animal.move(); // 输出: Animal moved 0 meters.
dog.move(); // 输出: Dog moved 5 meters with four legs.

在上面的例子中,Animal类有一个move方法,它会输出动物移动的距离。Dog类继承自Animal类,并重写了move方法,输出狗使用四条腿移动的距离。通过调用animal.move()和dog.move(),可以看到父类和子类的方法被正确地调用。

4.8 抽象类

TypeScript中的抽象类是一种特殊的类,它不能被实例化,只能被其他类继承。抽象类用于定义一组相关的方法和属性,这些方法和属性可以被继承类共享和重写。

要声明一个抽象类,需要在类名前面加上abstract关键字。抽象类可以包含抽象方法和非抽象方法。抽象方法只有方法的签名,没有具体的实现,而非抽象方法有具体的实现。

下面是一个使用抽象类的示例:

abstract class Animal {
  abstract makeSound(): void;

  move(): void {
    console.log("Moving...");
  }
}

class Dog extends Animal {
  makeSound(): void {
    console.log("Woof!");
  }
}

const dog = new Dog();
dog.makeSound(); // 输出 "Woof!"
dog.move(); // 输出 "Moving..."

在上面的例子中,Animal是一个抽象类,它包含一个抽象方法makeSound和一个非抽象方法move。Dog类继承自Animal类,并实现了makeSound方法。在创建Dog类的实例后,我们可以调用makeSound和move方法。

5 模块

TypeScript中的模块用于组织和管理代码,将相关的类、函数、变量等封装在一起,以便于重用和维护。模块可以被其他模块引用,从而实现代码的模块化和可复用性。

在TypeScript中,使用export关键字将模块中的类、函数或变量导出,以便其他模块可以使用。导出的元素可以是命名导出(named exports)或默认导出(default exports)。

下面是一个使用命名导出和默认导出的示例:

// 模块1
export class MyClass {
  // ...
}

export function myFunction() {
  // ...
}

export const myVariable = 42;

// 模块2
import { MyClass, myFunction, myVariable } from "./module1";

const obj = new MyClass();
myFunction();
console.log(myVariable);

在上面的例子中,我们在模块1中定义了一个MyClass类、一个myFunction函数和一个myVariable变量,并使用export关键字导出它们。在模块2中,我们使用import关键字引入模块1中导出的元素,并使用它们。

三、学习心得

学习JavaScript和TypeScript同样具有趣味性和实用性。JavaScript是一种强大的编程语言,可以为网页添加交互性和动态性。而TypeScript是JavaScript的超集,提供了静态类型检查和面向对象编程的特性,使得代码更加可维护和可扩展。

在学习JavaScript时,本人首先掌握了基本的语法和数据类型,包括变量、函数、条件语句和循环结构等。然后,本人学习了JavaScript的内置对象和API,例如字符串、数组、对象和日期等,以及它们提供的方法和属性。通过掌握这些基础知识,本人能够编写简单的JavaScript程序,并处理常见的数据操作和逻辑控制。

学习TypeScript时,本人了解了类型系统的概念和用法。通过使用类型注解和接口,本人可以在代码中明确指定变量和函数的类型,从而减少类型错误并提高代码的可读性和可维护性。此外,本人还学习了面向对象编程的概念,包括类、继承、多态和抽象类等。通过应用这些概念,可以更好地组织和管理代码,使其更具结构化和可扩展性。

在学习过程中,本人发现实践和项目经验对于掌握JavaScript和TypeScript至关重要。通过编写小型项目或参与开源项目,本人可以应用所学知识,并学习其他开发者的代码和技巧。此外,阅读相关的文档和教程,参加培训课程或在线学习平台也是很有帮助的,可以帮助本人深入了解语言的特性和最佳实践。

总的来说,学习JavaScript和TypeScript是一个不断提升的过程。掌握基础知识、实践和项目经验都是必不可少的。本人相信通过不断学习和实践后,能够成为一名优秀的JavaScript和TypeScript开发者,并能够构建出高质量和可维护的应用程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值