小型商城网站,创建网站公司 徐州,如何自建公司网站,网站首页的图标是怎么做的目录 一、数据类型分类
二、核心区别对比
1. 存储方式
2. 比较方式
3. 类型检测方法
三、特殊类型详解
1. Symbol
2. BigInt
3. null vs undefined
四、常见面试扩展问题
五、总结 一、数据类型分类
JavaScript 数据类型分为 基本数据类型#xff08;原始类型…目录 一、数据类型分类
二、核心区别对比
1. 存储方式
2. 比较方式
3. 类型检测方法
三、特殊类型详解
1. Symbol
2. BigInt
3. null vs undefined
四、常见面试扩展问题
五、总结 一、数据类型分类
JavaScript 数据类型分为 基本数据类型原始类型 和 引用数据类型对象类型共 8 种截至 ES2023
类型示例特点说明Undefinedlet a;变量声明未赋值时的默认值Nulllet b null;表示空值故意赋值的空Booleantrue / false逻辑值Number42 / 3.14 / NaN整数、浮点数及特殊数值Stringhello / world文本数据UTF-16 编码SymbolSymbol(id)唯一且不可变的标识符ES6BigInt123n大整数ES2020Object{} / [] / (){}复杂数据结构包括数组、函数等 二、核心区别对比
1. 存储方式
类型存储位置内存示意图基本类型栈内存变量 → 值直接存储引用类型堆内存栈存指针变量 → 地址指针 → 堆中的对象
示例 // 基本类型
let a 10;
let b a; // 值拷贝
b 20;
console.log(a); // 10互不影响// 引用类型
let obj1 { name: John };
let obj2 obj1; // 指针拷贝
obj2.name Alice;
console.log(obj1.name); // Alice指向同一对象 2. 比较方式
类型比较行为示例基本类型值相等即可5 5 → true引用类型比较内存地址是否同一对象{} {} → false
特殊案例
NaN NaN; // false唯一不等于自身的值
Object.is(NaN, NaN); // trueES6 的严格相等判断
null undefined; // true抽象相等比较
null undefined; // false类型不同 3. 类型检测方法
方法基本类型引用类型typeof返回类型名除 null返回 object 或 functioninstanceof无效始终 false检测构造函数原型链Object.prototype.toString.call()精准判断所有类型
经典问题
typeof null; // object历史遗留问题
typeof [1,2]; // object
typeof function(){}; // function[] instanceof Array; // true
({}) instanceof Object; // true 三、特殊类型详解
1. Symbol 唯一性相同参数的 Symbol 值不相等 Symbol(key) Symbol(key); // false 使用场景对象唯一属性键、定义私有成员、替代魔法字符串 const ID Symbol(id);
const user { [ID]: 123 };
2. BigInt 表示方法数字后加 n 或使用 BigInt() 构造函数 const bigNum 9007199254740993n; 特性不可与普通 Number 混合运算需显式转换
3. null vs undefined
对比点nullundefined含义主动赋值的空值变量未初始化的默认值使用场景释放对象引用函数参数未传入时的默认值类型转换Number(null) → 0Number(undefined) → NaN 四、常见面试扩展问题 深拷贝 vs 浅拷贝 基本类型拷贝值引用类型拷贝指针 深拷贝实现JSON.parse(JSON.stringify(obj))局限无法处理函数、循环引用、递归克隆 包装对象Boxing 基本类型调用方法时自动装箱
let str hello;
str.toUpperCase(); // 临时创建 String 对象 内存管理 基本类型随执行上下文销毁 引用类型依赖垃圾回收机制标记清除、引用计数 五、总结
理解 JavaScript 数据类型的关键在于 两大家族基本类型7种 vs 引用类型Object 三大差异存储方式、赋值行为、比较逻辑 特殊成员Symbol 的唯一性、BigInt 的大数处理、null 与 undefined 的语义区别
掌握这些核心概念能够帮助开发者避免常见陷阱如意外修改引用类型数据并写出更健壮的代码。