🌲☔️JS/TS 数据类型(基本数据类型-引用数据类型)

3,523 阅读4分钟

其安易持,其未兆易谋; 其脆易泮,其微易散。 为之于未有,治之于未乱。 合抱之木,生于毫末; 九层之台,起于垒土; 千里之行,始于足下。 为者败之,执者失之。 是以圣人无为故无败,无执故无失。 民之从事,常于几成而败之。 慎终如始,则无败事。 是以圣人欲不欲,不贵难得之货; 学不学,复众人之所过。 以辅万物之自然而不敢为。 --- 《道德经》 第六十四章。

JS/TS 基本数据类型 primitive data type

  1. 布尔类型
  2. 字符串类型
  3. 数字类型
  4. null
  5. undefined
  6. 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 引用数据类型

  1. 数组
  2. 对象
  3. 函数

数组

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 的补充类型

  1. 元组类型: 元组类型允许您用固定数量的元素表示数组,这些元素的类型是已知的,但不必相同。
  2. 枚举类型:是对标准数据类型集的有用补充enum
  3. Unknown 不知道类型: 描述编写应用程序时不知道的变量类型
  4. Any 任意类型: 与unknown类型不同,类型变量any允许您访问任意属性,即使不存在也是如此
  5. Void 空类型: void有点相反any:根本没有任何类型。一般用于函数返回值
  6. Never 永远不会的类型:该never类型表示值是不会发生的类型

也就是说,数据类型上多了 6 中约束类型。

小结

  1. 基本数据类型 6 种,以及基本的创建方式。
  2. TS基本数据类型与 JS 相同,其对 JS 类型的补充如何 枚举类型,any 类型等功能型类型
  3. 简单对比 JS 与 TS 定义创建变量的区别,其实就是类型约束的区别。

下一步

  • 数据类型判断
  • 类型断言