实现Ajax请求、实现深拷贝

news/2025/2/3 16:54:51 标签: ajax, okhttp, 前端, javascript

文章目录

  • 1 实现Ajax请求
  • 2 实现深拷贝
    • 2.1 方法1:JSON.stringify()
    • 2.2 方法2:函数库lodash的_.cloneDeep方法
    • 2.3 方法3:手写实现深拷贝函数

1 实现Ajax请求

  • Ajax(Asynchronous JavaScript and XML),是指通过JavaScript的异步通信,从服务器获取XML文档,从中提取数据,再更新当前网页的对应部分,而不用刷新整个网页。
  • 创建AJAX请求的步骤:
    1. 创建一个XMLHttpRequest对象。
    2. 在这个对象上使用open方法创建一个HTTP请求。
    3. 在发起请求前,为对象添加信息和监听函数。
    4. 最后调用send方法向服务器发起请求。
javascript">const SERVER_URL = "/server";
let xhr = new XMLHttpRequest();
xhr.open("GET", SERVER_URL, true);
xhr.onreadystatechange() = function () {
    if (this.status === 200) {
        handle(this.response);
    } else {
        console.error(this.statusText);
    }
}
xhr.onerror = function () {
    console.error(this.statusText);
}
xhr.responseType = "json";
xhr.setRequestHeader("Accept", "application/json");
xhr.send(null);

2 实现深拷贝

深拷贝相对浅拷贝而言,如果遇到属性值为引用类型的时候,它新建一个引用类型并将对应的值复制给它,因此对象获得的一个新的引用类型而不是一个原有类型的引用。

2.1 方法1:JSON.stringify()

  • JSON.parse(JSON.stringify(obj));

  • 利用JSON.stringify将js对象序列化(JSON字符串),再使用JSON.parse来反序列化(还原)js对象。

2.2 方法2:函数库lodash的_.cloneDeep方法

  • var _ = require(‘lodash’);
  • var obj2 = _.cloneDeep(obj1);

2.3 方法3:手写实现深拷贝函数

javascript">function deepCopy(object) {
    if (!object || typeof object !== "object") return;
    let newObject = Array.isArray(object)? []: {};
    for(let key in object){
        if(object.hasOwnProperty(key)) {
            newObject[key] = typeof object[key] === "object"? deepCopy(object[key]): object[key];
        }
    }
    return newObject;
}

http://www.niftyadmin.cn/n/5840920.html

相关文章

#define,源文件与头文件,赋值表达式

1.#define 1.1定义 #define 是一个预处理指令,用于定义宏 宏,是预处理阶段(在编译之前)由预处理器处理的代码片段 1.2使用 1.2.1 #define 可以定义常量 #define PI 3.14159 1.2.2 #define 可以定义宏函数 #define SQUARE(x) ((…

ResNet--深度学习中的革命性网络架构

一、引言 在深度学习的研究和应用中,网络架构的设计始终是一个关键话题。随着计算能力和大数据的不断提升,深度神经网络逐渐成为解决复杂任务的主流方法。然而,随着网络层数的增加,训练深度神经网络往往面临梯度消失或梯度爆炸的…

第 2 天:创建你的第一个 UE5 C++ 项目!

🎯 目标: 掌握 UE5 C 项目的创建流程,了解代码结构,并成功运行第一个 C 类! 1️⃣ 创建 UE5 C 项目 在 UE5 中,C 项目可以与蓝图(Blueprint)结合使用,让游戏逻辑更灵活…

Android 音视频编解码 -- MediaCodec

引言 如果我们只是简单玩一下音频、视频播放,那么使用 MediaPlayer SurfaceView 播放就可以了,但如果想加个水印,加点其他特效什么的,那就不行了; 学习 Android 自带的硬件码类 – MediaCodec。 MediaCodec 介绍 在A…

代码练习2.3

终端输入10个学生成绩&#xff0c;使用冒泡排序对学生成绩从低到高排序 #include <stdio.h>void bubbleSort(int arr[], int n) {for (int i 0; i < n-1; i) {for (int j 0; j < n-i-1; j) {if (arr[j] > arr[j1]) {// 交换 arr[j] 和 arr[j1]int temp arr[…

unity中的动画混合树

为什么需要动画混合树&#xff0c;动画混合树有什么作用&#xff1f; 在Unity中&#xff0c;动画混合树&#xff08;Animation Blend Tree&#xff09;是一种用于管理和混合多个动画状态的工具&#xff0c;包括1D和2D两种类型&#xff0c;以下是其作用及使用必要性的介绍&…

蓝桥杯例题六

奋斗是一种态度&#xff0c;也是一种生活方式。无论我们面对什么样的困难和挑战&#xff0c;只要心怀梦想&#xff0c;坚持不懈地努力&#xff0c;就一定能够迈向成功的道路。每一次失败都是一次宝贵的经验&#xff0c;每一次挫折都是一次锻炼的机会。在困难面前&#xff0c;我…

注解(Annotation)

注解&#xff08;Annotation&#xff09;在 Java 中可以用来简化类的使用&#xff0c;使得被注解的类能够被自动发现、自动创建并在需要的地方直接调用&#xff0c;而不需要手动创建实例。具体来说&#xff0c;注解是用来标识类、方法、字段等的&#xff0c;它们通常与一些框架…