# 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,bigintBigInt是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) // -> ?