**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']
```
**这两个数据类型可以用于保护一些数据,比如函数的返回值、对象内部的静态属性**
所以,在面试的时候如果能透漏出你了解的这些,肯定会给面试官留下不一样的印象哦~