---
url: https://sugarat.top/interview/js/primitiveType.md
---

# 原始类型有哪些

* ES5
  * string
  * number
  * boolean
  * null
  * undefined
* ES6 新增的
  * Symbol(ES2015)
  * Bigint(ES2020)

所以总的来说目前js的原始值类型有7种

**性质**

* 原始类型都为值类型,没有函数可以调用
* string类型不可变,无论自身调用什么方法,不会改变自身
* number是浮点类型，这就导致了一个问题`为什么0.1+0.2!==0.3`
  * 因为JavaScript使用IEEE浮点类型双精度。转换为二进制在计算但是小数无限延伸，二进制截取53位导致精度丢失。
  * Number.EPSILON的精度是2^-52，所以只要丢失精度小于Number.EPSILON基本可以确认相等。

```js
function compareNum(num1,num2){
    return Math.abs(num1-num2)<Number.EPSILON
}
console.log(compareNum(0.1+0.2,0.3)) // true
```
