JavaScript语言不是为编写大型 应用程序而设计的。

例如,JavaScript语言在相当长的时间里都缺少 对模块的支持。

此外,在编写JavaScript代码的过程中也缺少开发者 工具的支持。

因此,编写并维护大型JavaScript程序是困难的

一、TS相对JS的优点

1.1易于发现代码中的错误

js是一门具有弱类型和动态类型的编程语言,特点是数据类型检查发生在执行时,并且允许隐式的类型转换,码在真正运行前无法很好地检测代码中是否存在错误。

1.2提高生产力

代码自动补全:重命名、提取函数或方法、重命名、

1.3支持Javascript最新特性

随着JavaScript语言的应用越来越广泛,人们也在积极地修订 ECMAScript标准,不断加入新的特性,比如类、async和await等。但 由于兼容性问题,ECMAScript标准中新引入的特性往往无法直接在实 际项目中使用,因为JavaScript运行环境通常不会很快支持这些新特 性。

我们可以在TypeScript程序中直接使用它们。TypeScript编译器将负责把代码编译成兼容指定ECMAScript版本的JavaScript代码。

二、TS基础

2.1变量

计算机程序中,一个变量使用给定的符号名与内存中的某个存储地址相关联 并且可以容纳某个值。当操作变量时,实际操作的是变量对应的存储地址中的数据。因此,在程序中可以使用变量来存储和操作数据。

2.1.1变量声明

JS中声明变量的三种方式:var、let、const。

使用let和const关键字能够声明具有块级作用域的变量。

2.1.2块级作用域
分为“块”和“作用域”

变量的作用域指的是该变量的可访区域,在作用域外不可见。

块级作用域中的块指的是“块语句”,用于将零条或多条语句组织在一起。在语法上,块语句使用以一对{}来表示。

块级作用域指的是块语句所创建的作用域,但是使用var声明的变量不具有块级作用域。

2.2数据类型

原始数据类型
Undefined  

Undefined类型只包含一个值undefined。在变量未被初始化时,它的值为undefined。

Null

Null类型只包含一个值null。通常用null表示未初始化的对象。或用在Json文件中表示一个值不存在

Boolean

该类型包含两个逻辑值,true、false

Srting

Javascript使用UTF-16编码来表示一个字符。UTF-16编码两个字节作为一个编码单元。每个字符使用一个编码单元或两个编码单元表示

若字符串中包含需要使用两个编码单元表示的字符,那么获取字符串长度的结果可能不符合预期。 

Number

JavaScript不详细区分整数类型、浮 点数类型以及带符号的数字类型等。JavaScript使用双精度64位浮点 数格式(IEEE 754)来表示数字,因此所有数字本质上都是浮点数。 在该格式中,符号部分占用1位(bit),指数部分占用11位,小数部 分占用52位,一共占用64位。

Symbol

JavaScript提供了一个全局的“Symbol()”函数来创建Symbol类 型的值。我们可以将“Symbol()”函数想象成GUID(全局唯一标识 符)的生成器,每次调用“Symbol()”函数都会生成一个完全不同的 Symbol值。

(编程语言内置的基础数据类型,可用于构造复合类型)

复杂数据类型
Object

每个对象属性都属于一下两种形式之一:

数据属性:可以为Undefined、Null、Boolean、String、Number、Symbol、Object类型的值。

存取器属性:有一个或两个存取器方法构成,用于获取和设置Undefined、Null、Boolean、String、Number、Symbol、Object类型的值

三、TS进阶

3.1新增数据类型BigInt

属于原始数据类型。能够表示任意精度的整数,特别是大于于2^53 - 1的整数

const a = 1n

const b = BigInt(1) BigInt(尝试将传入的参数转换为BigInt类型)

3.2 字面量

在计算机科学中,字面量用于在源代码中表示某个固定值。在 JavaScript程序中,字面量不是变量,它是直接给出的固定值。

3.3可选链运算符

当尝试访问对象属性时,如果对象的值为undefined或null时,属性访问将会出错。

当访问对象属性时,通常需要检查对象是否已经初始化,可选链运算符简化了undefined/null的检查代码

1.基本语法
obj?.prop  
指的是如果obj为undefined或null,那么obj?.prop的求值结果为undefined,
否则是obj.prop

2.计算属性访问语法
obj?.[expr]
在该语法中,如果obj的值为undefined或null,那么表达式的求
值结果为undefined;否则,表达式的求值结果为obj[expr]。

3.可选的函数调用语法
fn?.()
在该语法中,如果fn的值为undefined或null,那么表达式的求值
结果为undefined;否则,表达式的求值结果为fn()


3.3.4.短路求值


如果可选链运算符左侧操作数的求值结果为undefined或null,那
么右侧的操作数不会再被求值,我们将这种行为称作短路求值

01 let x = 0;
02 let a = undefined;
03
04 a?.[++x]; // undefined
05 x; // 0
3.3.5控制合并运算符
a ?? b
该语法中,当且仅当“??”运算符左侧操作数a的值为undefined
或null时,返回右侧操作数b;否则,返回左侧操作数a

3.4Object和object和对象字面量

Object()构造方法:JS内置的构造函数用来创建一个对象

interface ObjectConstructor{
 readonly prototype:Object
//省略其他成员
}

declare var Object:ObjectConstructor

该定义可以直观了解到Object()的类型是ObjectConstructor,不是Object

Object类型是特殊对象Object.prototype的类型,该类型主要作用是描述js中几乎所有对象共有的属性和方法

Object类型是用来描述Object.prototype对象的类型

Object类型有一个特点,那就是除了undefined值和null值外,其 他任何值都可以赋值给Object类型。如:

01 let obj: Object;
02
03 // 正确
04 obj = { x: 0 };
05 obj = true;
06 obj = 'hi';
07 obj = 1;
08
09 // 编译错误
10 obj = undefined;
11 obj = null;

object类型

typecript2.2版本中,新增了一个object类型来描述非原始类型

const point:object = {name:'bob'}

object类型能赋值给以下三种类型

▪顶端类型any和unknown。

▪Object类型。

▪空对象类型字面量“{}”

1 const nonPrimitive: object = {};
02
03 const a: any = nonPrimitive;
04 const b: unknown = nonPrimitive;

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐