前端【数据类型】 No.1 Javascript的数据类型与区别

JavaScript 有哪些数据类型

JavaScript 有两种主要的数据类型分类: 原始类型和对象类型

原始类型是 JavaScript 中最基本的数据类型,它们是不可变的,按值存储。

原始类型有Number(数字)、String(字符串)、Boolean(布尔)、Undefined(未定义)、Null(空值)、Symbol(符号类型)、BigInt(大整数类型)

其中 Symbol 和 BigInt 是ES6 中新增的数据类型:

Symbol 代表创建后独一无二且不可变的数据类型,它主要是为了解决可能出现的全局变量冲突的问题。

javascript 复制代码
let symbol1 = Symbol('test');
let symbol2 = Symbol('test');
console.log(symbol1 === symbol2); // false,每个 Symbol 都是唯一的

BigInt 是一种数字类型的数据,它可以表示任意精度格式的整数,使用 BigInt 可以安全地存储和操作大整数, 即使这个数已经超出了 Number 能够表示的安全整数范围。

对象类型是复杂的数据类型,可以包含多个值或方法。它们是可变的,按引用存储。 常见的对象类型有:Object、Array、Function、Data、RegExp

主要区别

1.存储方式:存储位置的不同

  • 原始类型 :按值存储在栈内存中
  • 对象类型 :按引用存储,实际对象在堆内存中,变量存储的是引用地址

2. 可变性

  • 原始类型 :不可变
  • 对象类型 :可变

3. 比较方式

  • 原始类型 :按值比较
  • 对象类型 :按引用比较
javascript 复制代码
// 原始类型比较值
let a = 10;
let b = 10;
console.log(a === b); // true

// 对象类型比较引用
let obj1 = { name: "张三" };
let obj2 = { name: "张三" };
console.log(obj1 === obj2); // false,不同的对象实例

let obj3 = obj1;
console.log(obj1 === obj3); // true,相同的引用

4. 传递方式:

  • 原始类型 :按值传递
  • 对象类型 :按引用传递
javascript 复制代码
// 原始类型按值传递
function changeValue(val) {
  val = 100;
}
let num = 50;
changeValue(num);
console.log(num); // 50,原始值未改变

// 对象类型按引用传递
function changeObject(obj) {
  obj.name = "李四";
}
let person = { name: "张三" };
changeObject(person);
console.log(person.name); // "李四",对象被修改了

5. 类型检测

javascript 复制代码
// typeof 用于原始类型
console.log(typeof 123);        // "number"
console.log(typeof "hello");    // "string"
console.log(typeof true);       // "boolean"
console.log(typeof undefined);  // "undefined"
console.log(typeof Symbol());   // "symbol"
console.log(typeof BigInt(123)); // "bigint"

// typeof 对于 null 和对象的特殊情况
console.log(typeof null);       // "object" (这是 JavaScript 的一个历史遗留问题)
console.log(typeof {});         // "object"
console.log(typeof []);         // "object"

// 更准确的对象类型检测
console.log(Object.prototype.toString.call(null));     // "[object Null]"
console.log(Object.prototype.toString.call([]));       // "[object Array]"
console.log(Array.isArray([]));                        // true

在操作系统中,内存被分为栈区和堆区:

栈区内存由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 堆区内存一般由开发着分配释放,若开发者不释放,程序结束时可能由垃圾回收机制回收。

相关推荐
whyfail10 分钟前
前端学 Spring Boot(5):从“你是谁”到“服务真的上线了”
前端·spring boot·后端
程序员黑豆1 小时前
鸿蒙开发:RelativeContainer相对布局组件实战——实现5个文本组件对齐
前端·华为·harmonyos
环境栈笔记1 小时前
高性价比指纹浏览器推荐与选型:如何对照价格和实际可用功能筛选候选
前端·人工智能·后端·自动化
hyf3266331 小时前
泛程序哪有想象中难!小白跟着走一遍就全懂
前端·爬虫·搜索引擎·seo·蜘蛛池
码农学院1 小时前
React公众号开发:母婴用品会员积分体系技术方案
前端·react.js·前端框架
路光.2 小时前
Vue2升级Vue3处理原 UMD/CommonJS 打包文件,不是标准 ESM
前端·javascript·vue.js·vue3
黄华SJ520it2 小时前
门店预约系统开发:提升服务行业数字化转型
前端·数据库·系统开发
一只月月鸟呀2 小时前
移动端tap与click的区别 && 点透事件
开发语言·前端·javascript
雪隐2 小时前
AI股票小助手10-我用代码管住自己的手:一个普通人的市场观察笔记
前端·人工智能·后端
KaMeidebaby3 小时前
卡梅德生物技术快报|抗体筛选:抗体筛选中的噬菌体展示四参数调优——从流程设计到数据验证
开发语言·前端·javascript