# 1 数据类型基础

⚡ 30 秒速记

  • 8 种类型:7 个原始类型 number、string、boolean、null、undefined、symbol、bigint,加引用类型 Object
  • 赋值和传参:原始类型复制值,对象复制引用(地址);函数里改属性会影响外面,重新赋值不会
  • null 是「我故意设成空」,undefined 是「还没给值」;typeof null === 'object' 是历史问题
  • number 是 IEEE 754 双精度,占 8 字节;安全整数范围是 ±(2^53 - 1),即 Number.MAX_SAFE_INTEGER
  • 超过范围的大整数(订单号、雪花 ID)让后端按字符串返回,要运算再转 BigInt;0.1 + 0.2 !== 0.3 也是同一个浮点原因

JS 有 7 种原始类型和 1 种引用类型 Object,数组、函数、日期都是对象。 原始类型赋值是复制一份值,对象赋值是复制一个地址,两个变量指着同一个对象,改一个另一个也变。数字统一是 64 位浮点数,能精确表示的整数只到 2^53 - 1,也就是 9007199254740991,再大就会丢精度。所以后端返回 19 位的订单号,一经过 JSON.parse 就已经变了,前端怎么格式化都救不回来,正确做法是接口直接返回字符串。

# 1.1 JS内置类型

  • JS 中分为七种内置类型,七种内置类型又分为两大类型:基本类型和对象(Object)。
  • 基本类型有七种: null,undefined,boolean,number,string,symbol, bigint
    • BigInt 是 ES10 新增的数据类型
    • Symbol 代表独一无二的值,最大的用法是用来定义对象的唯一属性名。
    • BigInt 可以表示任意大小的整数。
  • 其中 JS 的数字类型是浮点类型的,没有整型。并且浮点类型基于 IEEE 754标准实现,在使用中会遇到某些 Bug。NaN 也属于 number 类型,并且 NaN 不等于自身。
  • 对于基本类型来说,如果使用字面量的方式,那么这个变量只是个字面量,只有在必要的时候才会转换为对应的类型。

引用数据类型:

  • 对象Object(包含普通对象-Object,数组对象-Array,正则对象-RegExp,日期对象-Date,数学函数-Math,函数对象-Function)
let a = 111 // 这只是字面量,不是 number 类型
a.toString() // 使用时候才会转换为对象类型

对象(Object)是引用类型,在使用过程中会遇到浅拷贝和深拷贝的问题。

let a = { name: 'FE' }
let b = a
b.name = 'EF'
console.log(a.name) // EF

说出下面运行的结果,解释原因。

function test(person) {
  person.age = 26
  person = {
    name: 'hzj',
    age: 18
  }
  return person
}
const p1 = {
  name: 'fyq',
  age: 19
}
const p2 = test(p1)
console.log(p1) // -> ?
console.log(p2) // -> ?
webapp
公众号
开发者导航
切换夜间模式
点击侧边栏上一篇
点击侧边栏下一篇
折叠侧边栏
收起全部