博客
关于我
JavaScript 知识梳理[一] 变量类型,浅拷贝,深拷贝
阅读量:590 次
发布时间:2019-03-12

本文共 1479 字,大约阅读时间需要 4 分钟。

JavaScript 变量类型及深浅拷贝

在编程语言中,变量的类型是理解和操作程序的基础。JavaScript 和 Java 等语言一样,变量的类型直接影响数据处理方式。了解变量类型的特性,可以帮助我们在数据复用或处理时做出合适的选择。

变量类型

变量类型可以分为 值类型引用类型。值类型包括:

  • 基本类型number(数字)、string(字符串)、boolean(布尔)、null(空值)、undefined(未定义)、symbol(符号)和 bigint(大整数)。
  • 数组类型Array
  • 函数类型Function

引用类型则包括:

  • 对象类型Object(普通对象)、Date(日期)、RegExp(正则表达式)等。
  • 数组类型Array(实际上归类于值类型,但在实现上存储为引用类型)。
  • 函数类型Function(归类于值类型,但在实现上可视为引用类型)。

值类型与引用类型的存储方式

值类型直接存储在栈中,程序执行时会直接获取这些值。而引用类型存储的不是实际数据,而是数据的地址(引用)。栈中存储的是引用地址,而实际数据存储在堆中。

浅拷贝与深拷贝

浅拷贝和深拷贝都针对引用类型的数据。两者的主要区别在于,浅拷贝是否复制目标对象的地址,而深拷贝是否复制目标对象的实际内容。

浅拷贝

浅拷贝仅拷贝引用地址,例如:

const obj = { a: 1 };const copy = obj; // 浅拷贝,copy 和 obj 引用同一个对象obj.a = 2; // 修改后,copy.a 也会变成 2

深拷贝

深拷贝会创建一个新的对象,复制目标对象的所有属性值,例如:

const obj = { a: 1 };const deepCopy = JSON.parse(JSON.stringify(obj)); // 创建新对象obj.a = 2; // 修改原对象,深拷贝对象保持 a: 1

实现深拷贝的方法

  • Object.assign 方法
  • const obj = { a: 1 };const copy = Object.assign({}, obj); // 深拷贝
    1. 解构赋值
    2. const { a, b } = obj;const copy = { a, b }; // 浅拷贝
      1. JSON 转换法
      2. const obj = { a: 1 };const copy = JSON.parse(JSON.stringify(obj)); // 深拷贝
        1. 递归拷贝
        2. function deepClone(obj) {  if (typeof obj !== 'object' || obj === null) {    return obj;  }  const result = Array.isArray(obj) ? [] : {};  for (const key in obj) {    if (obj.hasOwnProperty(key)) {      result[key] = deepClone(obj[key]);    }  }  return result;}

          通过上述方法,可以实现对引用类型数据的深拷贝。需要注意的是,深拷贝的方法是否真正实现深拷贝,取决于对象的结构(如是否包含嵌套对象或数组)。

          总结

          理解变量类型和深浅拷贝是编程的核心技能之一。值类型和引用类型的区别直接影响数据操作方式,而深浅拷贝则帮助我们在数据复用时避免意外修改。通过合理选择拷贝方法,可以确保程序的安全性和正确性。

    转载地址:http://qtdxz.baihongyu.com/

    你可能感兴趣的文章
    牛客-链表中环的入口节点(Java)
    查看>>
    堆的应用_topK算法和堆排序
    查看>>
    最大半连通子图
    查看>>
    Remove Extra one 维护前缀最大最小值
    查看>>
    另类加法,走方格的方案数,最近公共祖先
    查看>>
    [Java Path Finder][JPF学习笔记][7]JPF输出详细程度设置
    查看>>
    GitHub完整记录数据库GHTorrent的下载和安装经验
    查看>>
    设计模式—— 三:依赖倒置原则
    查看>>
    因SGA分配错误无法启动数据库
    查看>>
    ORA-00020 超过当前最大连接数
    查看>>
    喝红茶是否会上火
    查看>>
    Android进阶解密读书笔记2——第2章:Android系统启动——第1、2小节
    查看>>
    Android进阶解密读书笔记3——第2章:Android系统启动——第3、4、5、6小节
    查看>>
    GreenDao之注解
    查看>>
    Android使用Font Awesome
    查看>>
    主线程中Looper的轮询死循环为何没有阻塞主线程?
    查看>>
    Gradle实战四:Jenkins持续集成
    查看>>
    使用RestTemplate,显示请求信息,响应信息
    查看>>
    wgcloud运维监控系统错误:防篡改校验错误次数大于10次,不再上报数据
    查看>>
    为什么WGCLOUD安装完后,启动服务端打不开网页
    查看>>