其安易持,其未兆易谋; 其脆易泮,其微易散。 为之于未有,治之于未乱。 合抱之木,生于毫末; 九层之台,起于垒土; 千里之行,始于足下。 为者败之,执者失之。 是以圣人无为故无败,无执故无失。 民之从事,常于几成而败之。 慎终如始,则无败事。 是以圣人欲不欲,不贵难得之货; 学不学,复众人之所过。 以辅万物之自然而不敢为。 --- 《道德经》 第六十四章。
JS/TS 基本数据类型 primitive data type
- 布尔类型
- 字符串类型
- 数字类型
- null
- undefined
- es6 的 Symbol 数据类型
布尔类型: Boolean
乔治·布尔(George Boole,1815.11.2~1864),1815年11月2日生于英格兰的林肯。 19世纪最重要的数学家之一,出版了《逻辑的数学分析》 ,这是它对符号逻辑诸多贡献中的第一次。1854年,他出版了《思维规律的研究》 ,这是他最著名的著作。在这本书中布尔介绍了现在以他的名字命名的布尔代数。
// js
let bool = false;
let boolr = true;
// ts
let boolts: boolean = false;
let boolrts: boolean = true;
布尔包装类型:
包装类型是通过构造函数创建,本事一个包装了基本类型的对象。
let boolWrap = new Boolean(fasle);
字符串类型
Character string:字符串或串(String)是由数字、字母、下划线组成的一串字符。
// js
let str = 'this is string';
// ts
let strTs: string = 'this is ts string';
字符串包装类型
let strWrap = new String(false)
字符串包装类型的本质是一个包装了字符串的对象。
数字类型
数字类型用于表示数量值,用于计算
let a = 123;
// ts
let b: number = 123;
数字包装类型:
let num = new Number(123)
字符串包装类型是一个对象,包装了 number 类型。
null
Null 类型一般表示是清空,什么都没有。
// js
let xi = null;
// ts
let xii: null = null;
undefined 类型
undefined 表示还没有进行定义,与 null 不同的是 null 其实空,不是没有定义。没有定义的变量如果访问了,会输出 undefined, 或者报错。
// js
let b = undefined;
//ts
let c: undefined = undefined
Symbol
符号,表示是独一无二的,Symbol 从 JavaScript 中引入就是为了解决独一无二的特性。如:对象属性名具有唯一性。 Symbol 是由 Symbol 函数调用创建,没有构造函数
let sym = Symbol(123)
小结
JavaScript 中的基本数据类型 primitive data type 就是这六种。基本数据类型保存在栈中。基本数据类型没有引用数据类型的变化。
JS/TS 引用数据类型
- 数组
- 对象
- 函数
数组
javascript 数组是一个数据的集合, 成员可以是基本数据类型,也可以是引用类型。但是 TypeScript 对数字成员进行了约束,必须全部为指定的类型。
// 创建一个数组
let a = [1, 2, 3, 'string'];
var arr_names:number[] = new Array(4)
// ts
let a: number[] = [1, 2, 3]; // 成员必须都是 number
let a: Array<number> = [1,2,3]; // 使用泛型约束所有成员都是number类型
// ts 指定类型
let b = [number, string, number] = [123, 'hello', 89]
对象类型
对象是key-value的集合,在 JavaScript 中 value,值可以是:基本数据类型,引用数据类型。
// js
let ob = {
aa: false,
bb: 123,
cc: 'this is cc',
dd: null,
ee: undefined;
ff: Symbol("ff"),
gg: [1, 2, 4],
hh: function() {console.log("hh")},
jj: {x: 123, y: false}
}
//
let ob: Object = {
aa: false,
bb: 123,
cc: 'this is cc',
dd: null,
ee: undefined;
ff: Symbol("ff"),
gg: [1, 2, 4],
hh: function() {console.log("hh")},
jj: {x: 123, y: false}
}
函数类型
// ts, 如果需要类型,需要在函数内部判断类型
let func = function func(a) { console.log(a)}
// ts 参数类型,返回值类型,确定函数类型
let fn = function fn(a: number):void {console.log(a)}
TS 的补充类型
- 元组类型: 元组类型允许您用固定数量的元素表示数组,这些元素的类型是已知的,但不必相同。
- 枚举类型:是对标准数据类型集的有用补充enum
- Unknown 不知道类型: 描述编写应用程序时不知道的变量类型
- Any 任意类型: 与unknown类型不同,类型变量any允许您访问任意属性,即使不存在也是如此
- Void 空类型: void有点相反any:根本没有任何类型。一般用于函数返回值
- Never 永远不会的类型:该never类型表示值是不会发生的类型
也就是说,数据类型上多了 6 中约束类型。
小结
- 基本数据类型 6 种,以及基本的创建方式。
- TS基本数据类型与 JS 相同,其对 JS 类型的补充如何 枚举类型,any 类型等功能型类型
- 简单对比 JS 与 TS 定义创建变量的区别,其实就是类型约束的区别。
下一步
- 数据类型判断
- 类型断言