前端培训丁鹿学堂:js新增的数据类型知多少?

84 阅读2分钟

js的数据类型有哪些?

这是一个很基础的面试题。一般一到两年工作经验的人的岗位会问到这个东西。

很多人不以为然,不就是 number,string,bool,undefined,null,object吗?

草率啦,几年前的回答没错,现在呢?其实es6新增了一种数据类型 Symbol

Symbol。指的是独一无二的值。每个通过 Symbol() 生成的值都是唯一的

所以你答出来symbol才算正确的。

但是到这里并不算完,这个题除了考察基础外,还有一层意思,就是看你会不会去主动了解一些js的前沿的东西。

接下来的就是加分项,ES2020,新增了一个数据类型,bigInt,

关于bigInt扯起来就话长了,面试的时候你只需要说: ES2020引入了一种新的数据类型 BigInt。BigInt 只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示。

到这里还不算完,JavaScript即将推出两个新的数据类型:Record 和 Tuple

今天我们就来认识一下这两个新增的数据类型吧!

Record 可以理解为只读的Object

怎么创建呢?语法如下

// Records
const oneRecord = #{
 name: 'zhangsan',
  age: 18
}

Tuple 可以理解为只读的数组。

// Tuple
const oneTuple = #['1', '2', '3']

他们的三个特性要了解:

1 只读性,就是你改变会报错

oneRecord[age] = 20 // error

2 非唯一性

如果定义两个对象,即使他们的内容都一样,也不会相等,因为他们的内存地址不一样

let obj1 = {name:'zhangsan1',age:18}
let obj2 = {name:'zhangsan1',age:18}
obj1 === obj2  // false

但是Records 就不同了,只要内容相同,就是全等的

let obj3 = #{name:'zhangsan1',age:18}
let obj4 = #{name:'zhangsan1',age:18}
obj3 === obj4 // true

3 普通对象和数组的转换

const oneRecord = Record({name:'zhangsan1',age:18});   // #{name:'zhangsan1',age:18}
const oneTuple = Tuple(['1', '2', '3']);   // #['1', '2', '3']

这两个数据类型可以用于保护一些数据,比如函数的返回值、对象内部的静态属性

所以,在面试的时候如果能透漏出你了解的这些,肯定会给面试官留下不一样的印象哦~