实现浅拷贝

article/2025/10/12 9:53:06

浅拷贝是指,一个新的对象对原始对象的属性值进行精确地拷贝,如果拷贝的是基本数据类型,拷贝的就是基本数据类型的值,如果是引用数据类型,拷贝的就是内存地址如果其中一个对象的引用内存地址发生改变,另一个对象也会发生变化。

(1)Object.assign()

Object.assign()是ES6中对象的拷贝方法,接受的第一个参数是目标对象,其余参数是源对象,用法:Object.assign(target, source_1, ···),该方法可以实现浅拷贝,也可以实现一维对象的深拷贝。

注意:

  • 如果目标对象和源对象有同名属性,或者多个源对象有同名属性,则后面的属性会覆盖前面的属性。
  • 如果该函数只有一个参数,当参数为对象时,直接返回该对象;当参数不是对象时,会先将参数转为对象然后返回。
  • 因为null 和 undefined 不能转化为对象,所以第一个参数不能为null或 undefined,会报错。

(2)扩展运算符

使用扩展运算符可以在构造字面量对象的时候,进行属性的拷贝。语法:let cloneObj = { ...obj };

(3)数组方法实现数组浅拷贝

1)Array.prototype.slice 

  • slice()方法是JavaScript数组的一个方法,这个方法可以从已有数组中返回选定的元素:用法:array.slice(start, end),该方法不会改变原始数组
  • 该方法有两个参数,两个参数都可选,如果两个参数都不写,就可以实现一个数组的浅拷贝。

2)Array.prototype.concat 

  • concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。
  • 该方法有两个参数,两个参数都可选,如果两个参数都不写,就可以实现一个数组的浅拷贝。

(4)手写实现浅拷贝

创建一个新对象,遍历传入对象的属性for...in... ,如果该属性是传入对象本身的属性(hasOwnProperty),就赋值给新对象newobj[key]=obj[key]

//浅拷贝
let obj={"hh":"hhh",d:{"k":"kk"}
}function scopy(obj){//创建一个新对象let newobj={}//遍历所有属性,赋值给新对象for(let key in obj){if(obj.hasOwnProperty(key)){newobj[key]=obj[key]}}return newobj
}
let obj1=scopy(obj)
console.log(obj.d===obj1.d)   


http://chatgpt.dhexx.cn/article/5BW6NIeu.shtml

相关文章

浅拷贝

图片转自js 深拷贝 vs 浅拷贝 我们平常说的深拷贝和浅拷贝都是基于对诸如 Object 和 Array 等引用数据类型的拷贝。对于基本数据而言,拷贝为某个值的赋值。 在说拷贝之前,我们先复习一下什么是基本数据类型和引用类型。 基本数据类型 JavaScript 中基…

深浅拷贝以及解决浅拷贝(以string浅拷贝为例)

一、什么是浅拷贝 在类和对象的时候,其中编译器生成的默认拷贝构造函数中,内置类型是按照字节方式直接拷贝的,而自定义类型是调用其拷贝构造函数完成拷贝的。 默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝叫做浅…

ctf之培根密码

根据特征怀疑是培根密码 flag{AAAABAAAAAAAABAABBBAABBABABAAABAABAAAABBAABAAABABBABAAAAAABAABAAAABBBABABAABAABA} 直接在线解密 https://tool.bugku.com/peigen/ flag{BACONISDELICIOUS}

培根密码加解密

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴! 0x00 介绍 培根密码实际上就是一种替换密…

培根密码解密脚本

官方吐槽:疫情复发难受,什么时候是个头 #!/usr/bin/env python3 # -*- coding:utf-8 -*- #Author:later_future import string miweninput("请输入密文:") count0 msg"" flag"" #培根加密百度百科…

攻防世界crypto部分sherlock的writeup,原来不是培根密码。

下载附件后,发现是一个很大的文本,搜了下flag没啥收获。 1、后来看到下面这个 2、明显的故意大写,难道是培根密码?这就有思路了,将大写过滤出来: cat f590c0f99c014b01a5ab8b611b46c57c.txt | grep -Eo […

培根密码加解密(Python)

原理 加密时,明文中的每个字母会根据下面转换成5个字母; 解密时,密文中的每5个字母为一组转换成对应的1个字母; Python代码如下: CODE_TABLE { #培根字典aaaaa:a,aaaab:b,aaaba:c,aaabb:d,aabaa:e,aabab:f,aabba:…

CTF密码学-加解密总结

零基础学黑客,搜索公众号:白帽子左一密码学基本简介 密码学(在西欧语文中,源于希腊语krypts“隐藏的”,和grphein“书写”)是研究如何隐密地传递信息的学科。 在现代特别指对信息以及其传输的数学性研究&…

密码及编码

1. 密码 古典密码学 凯撒密码(Caeser):位移密码 特殊形式(加解密相同,因为26个字母是循环的):ROT13 栅栏密码:分组密码。 弗吉尼亚 现代密码学 对称加密算法:使用加密用过的秘钥及相同算法的…

CTF-密码学-培根密码

题目:bacon bAcon iS a MEaT prodUcT prePared frOm a pig and UsuALLy cUReD. 读题:翻译过来意思是培根 审题:联想到培根密码 解题:培根密码就是大写变A小写变B import string timu"bAcon iS a MEaT prodUcT prePared frOm…

【无标题】简单的培根密码解密

第一题 题目AABBBAABAAABABAABABAABBAB BABAAABBABBAAAAAAABB 此题由大写字母AB组成,不难看出这可以用培根密码转换器进行解密得出flag 解密得出flag{HELLO WORD}

CTF-Show密码学【摩斯码、培根密码】

萌新 密码33 一、题目信息 题目名称:我想吃培根题目描述:-- — .-. … . …–.- … … …–.- -.-. — — .-… …–.- -… …- - …–.- -… .- -.-. — -. …–.- … … …–.- -.-. — — .-… . .-. …–.- – – -… -… – -… – -… – – – -…

CTF-培根密码

CTF学习上的一些疑点和解疑 主题:培根密码的随意性 反正我是觉得挺离谱的 序章 CTF学习上的一些疑点和解疑前言:培根小贴士一、培根密码是什么?二、解答1.题目2.解密顺序 总结还没听懂的我给大家展现一些例子: 前言:…

密码学笔记——培根密码

培根密码,培根所用的密码是一种本质上用二进制数设计的,没有用通常的0和1来表示,而是采用a和b 一、培根密码加密方式 第一种方式: A aaaaa B aaaab C aaaba D aaabb E aabaa F aabab G aabba H aabbb I abaaa J abaab K ababa L ababb M abbaa N abbab O abbba P abb…

培根密码(Bacon)——python解密

简介 培根密码,又名倍康尼密码(英语:Bacon’s cipher)是由法兰西斯培根发明的一种隐写术。 特点: 培根密码本质上是将二进制信息通过样式的区别,加在了正常书写之上。培根密码所包含的信息可以和用于承载…

CTF-bacon(培根密码)

一、题目 培根密码实际上就是一种替换密码,根据所给表一一对应转换即可加密解密 。它的特殊之处在于:可以通过不明显的特征来隐藏密码信息,比如大小写、正斜体等,只要两个不同的属性,密码即可隐藏。 二、解题思路 …

【密码学 | CTF】培根密码

原理简述 加密方式有两种,但说实话我没看懂第二种的;i-j和u-v是怎么加密的呢?一解密岂不是乱了? 但解密用第一种方式就行了,每五个切割,对照字典解密即可,难度很小 def 培根密码_解密():培根密…

XML文档操作

文章目录 [toc] XML概述代码示例 CSS格式化XML为什么要用CSS样式表: 代码示例:代码详解: XSLT转化XMLXSLT简介:代码示例代码详解:正确的样式表声明从XML里提取数据节点匹配 DOM解析XMLXML DOM简介节点 代码示例代码详解…

XML文件的DOCTYPE定义

2019独角兽企业重金招聘Python工程师标准>>> DOCTYPE的常用声明&#xff1a;按照 HTML 4.01 XHTML 1.0 XHTML 1.1 列表如下&#xff0c;错误的DOCTYPE HTML PUBLIC反而会导致页面解析错误。HTML 4.01规范分为&#xff1a;Strict, Transitional, Frameset <!DO…

XML的内容

XML简介&#xff1a; XML是跨平台的语言&#xff0c;它不需要安装任何环境的语言&#xff0c; 它是所有语言所共有的&#xff0c;单独的语言&#xff0c;并且不是所有语言内部的。 它是让所有语言去和xml交互 。 注意&#xff1a; html前身是xml <></>&#xff0…