TypeScript
随着JavaScript语言的应用越来越广泛,人们也在积极地修订 ECMAScript标准,不断加入新的特性,比如类、async和await等。但 由于兼容性问题,ECMAScript标准中新引入的特性往往无法直接在实 际项目中使用,因为JavaScript运行环境通常不会很快支持这些新特 性。js是一门具有弱类型和动态类型的编程语言,特点是数据类型检查发生在执行时,并且允许隐式的类型转换,码在真
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;
更多推荐
所有评论(0)