# 1 数据类型基础
⚡ 30 秒速记
- 8 种类型:7 个原始类型(
number、string、boolean、null、undefined、symbol、bigint)+ 1 个引用类型Object - 存储差异:原始类型的值存在栈上;引用类型的值在堆上,栈里只存地址 —— 赋值时前者拷贝值、后者拷贝地址
null表示"有意的空值",undefined表示"未赋值"——函数无返回值、变量声明未初始化都是后者- ⚠️
typeof null === 'object'是历史遗留 bug(早期用类型标签低三位判断,null全 0 被误判为对象) 0.1 + 0.2 !== 0.3源于IEEE 754双精度浮点:十进制小数无法精确表示;金额计算要用整数分或decimal库
JavaScript 有七种基本类型,以及以 Object 为代表的引用类型。 基本类型赋值时复制值,引用类型赋值时复制对象地址,所以修改共享对象会影响所有指向它的变量。null 表示有意设置的空值,undefined 通常表示尚未赋值;虽然 typeof null 返回 object,但这只是早期类型标记造成的历史问题。数字采用 IEEE 754 双精度浮点表示,因此小数和超大整数都要注意精度边界。
# 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) // -> ?