发表于: 2020-06-28 20:54:45

1 2145


今天完成的事情:

1.回顾任务


明天计划的事情:

1.回顾任务


遇到的问题和收获:

评审的时候师兄提到了bigint和symbol的数据类型


新类型:BigInt

是一种内置对象,它提供了一种方法来表示大于 2^53 - 1 的整数。这原本是 Javascript中可以用 Number 表示的最大数字。BigInt 可以表示任意大的整数。

可以用在一个整数字面量后面加 n 的方式定义一个 BigInt ,如:10n,或者调用函数BigInt()。

const theBiggestInt = 9007199254740991n;

const alsoHuge = BigInt(9007199254740991);
// ↪ 9007199254740991n

const hugeString = BigInt("9007199254740991");
// ↪ 9007199254740991n

const hugeHex = BigInt("0x1fffffffffffff");
// ↪ 9007199254740991n

const hugeBin = BigInt("0b11111111111111111111111111111111111111111111111111111");
// ↪ 9007199254740991n

它在某些方面类似于 Number ,但是也有几个关键的不同点:不能用于 Math 对象中的方法;不能和任何 Number 实例混合运算,两者必须转换成同一种类型。在两种类型来回转换时要小心,因为 BigInt 变量在转换成 Number 变量时可能会丢失精度。




Symbol 的用途就是如此:Symbol 可以创建一个独一无二的值(但并不是字符串)。

ES 6 引入了一个新的数据类型 Symbol,它是用来做什么的呢?

为了说明 Symbol 的作用,我们先来描述一个使用场景。

我们在做一个游戏程序,用户需要选择角色的种族。

var race = {
 protoss: 'protoss', // 神族
 terran: 'terran', // 人族
 zerg: 'zerg' // 虫族
}

function createRole(type){
 if(type === race.protoss){创建神族角色}
 else if(type === race.terran){创建人族角色}
 else if(type === race.zerg){创建虫族角色}
}

那么用户选择种族后,就需要调用 createRole 来创建角色:

// 传入字符串
createRole('zerg')
// 或者传入变量
createRole(race.zerg)

一般传入字符串被认为是不好的做法,所以使用 createRole(race.zerg) 的更多。

如果使用 createRole(race.zerg),那么聪明的读者会发现一个问题:race.protoss、race.terran、race.zerg 的值为多少并不重要。

改为如下写法,对 createRole(race.zerg) 毫无影响:

var race = {
 protoss: 'askdjaslkfjas;lfkjas;flkj', // 神族
 terran: ';lkfalksjfl;askjfsfal;skfj', // 人族
 zerg: 'qwieqwoirqwoiruoiwqoisrqwroiu' // 虫族
}

也就是说:

race.zerg 的值是多少无所谓,只要它的值跟 race.protoss 和 race.terran 的值不一样就行。

Symbol 的用途就是如此:Symbol 可以创建一个独一无二的值(但并不是字符串)。

用 Symbol 来改写上面的 race:

var race = {
 protoss: Symbol(),
 terran: Symbol(),
 zerg: Symbol()
}

race.protoss !== race.terran // true
race.protoss !== race.zerg // true

你也可以给每个 Symbol 起一个名字:

var race = {
 protoss: Symbol('protoss'),
 terran: Symbol('terran'),
 zerg: Symbol('zerg')
}

不过这个名字跟 Symbol 的值并没有关系,你可以认为这个名字就是个注释。如下代码可以证明 Symbol 的名字与值无关:

var a1 = Symbol('a')
var a2 = Symbol('a')
a1 !== a2 // true






返回列表 返回列表
评论

    分享到