TypeScript:数据类型(1)

1.、boolean(布尔值):只有两个值true/false

let isfalse: boolean = false;
let istrue: boolean = true;


2、number(数字):TypeScript中所有数字都是使用浮点数或大整数存储的,此外number还支持二进制,八进制和十六进制。

let decLiteral: number = 6;//整数
let hexLiteral: number = 0xf00d;//十六进制
let binaryLiteral: number = 0b1010;//二进制
let octalLiteral: number = 0o744;//八进制


3、string(字符串):string类型可以存储文本数据类型,使用双引号("")或单引号('')来包裹住内容。

let name: string = "bob";
name = "smith";


4、null和undefined:这两者各有各的类型,它们既是值也是类型,但是这两种类型的用处不大,

默认情况下,undefined 和 null 是所有类型的子类型,可以赋值给任意类型的值,也就是说可以把 undefined 赋值给 string 类型,也可以赋值给 number 类型。

当在 tsconfig.json 的"compilerOptions"里设置为 "strictNullChecks": true 时,就必须严格对待了。这时 undefined 和 null 将只能赋值给它们自身或者 void 类型。这样可以规避一些错误。

let u: undefined = undefined;
let n: null = null;


5、bigint(大整数):bigint可以存储任意大的整数。

使用Bigint可以操作和存储大整数,即使这个数已经超出了Number 能够表示的安全整数范围。

由于在 JavaScript 中采用双精度浮点数,这导致精度有限,在超出范围之后会出现问题。

const max = Number.MAX_SAFE_INTEGER;
const max1 = max + 1;
const max2 = max + 2;
max1 === max2;     // true

在上面的代码中使用Number.MAX_SAFE_INTEGER获取到了Number的最大值,在最大值的基础上分别+1和+2,max1和max2应该是不相等的,但运行结果是true,而bigint就可以解决这个问题

const max = BigInt(Number.MAX_SAFE_INTEGER);//将number类型转为BigInt类型
const max1 = max + 1n//数字末尾加n表示当前的数字是BigInt类型
const max2 = max + 2n
max1 === max2    // false

number和bigint虽然都是存储数字的,但是两种类型是完全不一样的,所以需要用BigInt(number)把number转为bigint,同时要在数字后加上n表示数字是bigint类型,不加会被认为是number类型。

 

6、symbol:symbol表示独一无二,可以通过symbol构造函数生成。

const s = Symbol(); //生成时不要加new关键字,直接调用即可
typeof s; // symbol

可以在创建时传入一个参数,这个参数必须是一个字符串,传入的如果不是字符串则会调用toString将传入的参数转换为字符串。

const s1 = Symbol("TypeScript");
const s2 = Symbol("Typescript");
console.log(s1 === s2); // false

上面这段代码中的s1和s2传入的是完全一样的内容,但是对比仍是flase,这就说明symbol会返回一个独一无二的值。

symbol 也可以作为属性名,因为symbol的值是独一无二的,所以当它作为属性名时,不会与其他任何属性名重复。调用时必须使用[]调用

let name = Symbol(); 
let obj = {   [name]: "TypeScript" };
console.log(obj);// { Symbol(): 'TypeScript' }
console.log(obj[name]); // 'TypeScript' 
console.log(obj.name);  // undefined


使用 Symbol 类型值作为属性名,这个属性是不会被 for…in遍历到的,也不会被Object.keys()、Object.getOwnPropertyNames() 、 JSON.stringify() 等方法获取到。

const name = Symbol("name"); 
const obj = { 
  [name]: "TypeScript", 
  age: 18 
};
for (const key in obj) { 
  console.log(key); 
}  
console.log(Object.keys(obj));  // ['age'] 
console.log(Object.getOwnPropertyNames(obj));  // ['age'] 
console.log(JSON.stringify(obj)); // '{ "age": 18 }

虽然上面这些方法都不能获取属性,但是Symbol毕竟不是私有属性还是可以通过Object.getOwnPropertySymbols 方法获取对象的所有symbol类型的属性名。

const name = Symbol("name"); 
const obj = {   [name]: "TypeScript",   age: 18 };
const SymbolPropNames = Object.getOwnPropertySymbols(obj);
 console.log(SymbolPropNames); // [ Symbol(name) ] 
console.log(obj[SymbolPropNames[0]]); // 'TypeScript'


还可以使用静态方法 Reflect.ownKeys ,它可以返回所有类型的属性名,包括symbol

const name = Symbol("name"); 
const obj = {   [name]: "TypeScript",   age: 18 };
console.log(Reflect.ownKeys(obj)); // [ 'age', Symbol(name) ]


以上为简单基础类型,希望各位大佬指正文章中出现的错误和缺少的细节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值