# 原始类型有哪些

  • 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基本可以确认相等。
function compareNum(num1,num2){
    return Math.abs(num1-num2)<Number.EPSILON
}
console.log(compareNum(0.1+0.2,0.3)) // true
1
2
3
4