当前位置: 首页 > wzjs >正文

网站建设合同付款方式微商货源网

网站建设合同付款方式,微商货源网,网站编辑外包,wordpress添加表对象浅拷贝 方法一:使用 Object.assign() Object.assign() 方法用于将一个或多个源对象的所有可枚举属性复制到目标对象。它会返回目标对象。 const originalObj {name: John,age: 30,hobbies: [reading, running] };const shallowCopy Object.assign({}, orig…

对象浅拷贝

方法一:使用 Object.assign()

Object.assign() 方法用于将一个或多个源对象的所有可枚举属性复制到目标对象。它会返回目标对象。

const originalObj = {name: 'John',age: 30,hobbies: ['reading', 'running']
};const shallowCopy = Object.assign({}, originalObj);console.log(shallowCopy); 
// 修改浅拷贝对象的基本类型属性
shallowCopy.name = 'Jane';
console.log(originalObj.name); // John
console.log(shallowCopy.name); // Jane// 修改浅拷贝对象的引用类型属性
shallowCopy.hobbies.push('swimming');
console.log(originalObj.hobbies); // ['reading', 'running', 'swimming']
console.log(shallowCopy.hobbies); // ['reading', 'running', 'swimming']
方法二:使用扩展运算符(...

扩展运算符可以将一个对象或数组展开。

const originalObj = {name: 'John',age: 30,hobbies: ['reading', 'running']
};const shallowCopy = {...originalObj };console.log(shallowCopy); 
// 修改浅拷贝对象的基本类型属性
shallowCopy.name = 'Jane';
console.log(originalObj.name); // John
console.log(shallowCopy.name); // Jane// 修改浅拷贝对象的引用类型属性
shallowCopy.hobbies.push('swimming');
console.log(originalObj.hobbies); // ['reading', 'running', 'swimming']
console.log(shallowCopy.hobbies); // ['reading', 'running', 'swimming']
方法三:使用Object.create()
let a = {name: '艾总',like: {n: 'running'}}
let b = Object.create(a)
a.name = '黎总'
console.log(a);
console.log(b);
console.log(b.name);
//{ name: '黎总', like: { n: 'running' } }
//{}
//黎总

数组浅拷贝

方法一:[].concat(arr)
let arr = [1, 2, 3, { a: 10 }]
let newArr = [1, 2].concat(arr)
arr[3].a = 100
console.log(arr);
console.log(newArr);
//[ 1, 2, 3, { a: 100 } ]
//[ 1, 2, 1, 2, 3, { a: 100 } ]
方法二:arr.slice(0)
arr = [1, 2, 3, 4, 5, { age: 18 }]
const arr1 = arr.slice(0)
arr[5].age = 20
console.log(arr);
console.log(arr1);
//[ 1, 2, 3, 4, 5, { age: 20 } ]
//[ 1, 2, 3, 4, 5, { age: 20 } ]
方法三:arr.toReversed().reverse()
arr = [1, 2, 3, 4, 5, { age: 18 }]
const arr1 = arr.toReversed().reverse()
arr[5].age = 20
console.log(arr);
console.log(arr1);
//[ 1, 2, 3, 4, 5, { age: 20 } ]
//[ 1, 2, 3, 4, 5, { age: 20 } ]
方法四:使用扩展运算符(...

扩展运算符可以将一个对象或数组展开。

对象深拷贝

方法一:使用 JSON.parse(JSON.stringify())

这是一种简单的深拷贝方法,但有一些局限性,比如不能处理函数、Symbol 类型的属性和 Date 对象等。

const originalObj = {name: 'John',age: 30,hobbies: ['reading', 'running']
};const deepCopy = JSON.parse(JSON.stringify(originalObj));console.log(deepCopy); 
// 修改深拷贝对象的基本类型属性
deepCopy.name = 'Jane';
console.log(originalObj.name); // John
console.log(deepCopy.name); // Jane// 修改深拷贝对象的引用类型属性
deepCopy.hobbies.push('swimming');
console.log(originalObj.hobbies); // ['reading', 'running']
console.log(deepCopy.hobbies); // ['reading', 'running', 'swimming']
方法二:自定义递归函数

通过递归遍历对象的所有属性,复制每个属性的值。

使用typeof检测引用数据类型(如对象、数组、函数等)时,除了函数会返回 'function' 外,其他的引用数据类型都会返回 'object'

function deepClone(obj) {// 使用typeof检测引用数据类型(如对象、数组、函数等)时,// 除了函数会返回 'function' 外,其他的引用数据类型都会返回 'object'。//typeof 数组 会返回'object'//typeof 无法细致区分不同类型的引用数据,所以统一将数组归类为 'object'。if (typeof obj !== 'object' || obj === null) {//后续调用deepClone方法时如果是基本数据类型,会直接返回!!!return obj}let clone;if (Array.isArray(obj)) {clone = [];for (let i = 0; i < obj.length; i++) {clone[i] = deepClone(obj[i]);}} else {//进入这里代表obj是一个对象,对对象进行深拷贝时必须确保拷贝的属性是当前对象自身的属性clone = {}//  使用 for...in 循环进行遍历时,会遍历到对象原型链上的可枚举属性。for (let key in obj) {//所以使用obj.hasOwnProperty(key)进行确认if (obj.hasOwnProperty(key)) {clone[key] = deepClone(obj[key])}}}return clone;
}const originalObj = {name: 'John',age: 30,hobbies: ['reading', 'running']
};const deepCopy = deepClone(originalObj);console.log(deepCopy);
// 修改深拷贝对象的基本类型属性
deepCopy.name = 'Jane';
console.log(originalObj.name); // John
console.log(deepCopy.name); // Jane// 修改深拷贝对象的引用类型属性
deepCopy.hobbies.push('swimming');
console.log(originalObj.hobbies); // ['reading', 'running']
console.log(deepCopy.hobbies); // ['reading', 'running', 'swimming']

注意事项

  • 虽然 for...in 会遍历原型链上的可枚举属性,但现代 JavaScript 中很多内置对象的原型属性是不可枚举的,比如 Object.prototype 上的方法(toStringhasOwnProperty 等),所以 for...in 通常不会遍历到这些方法。
  • for...in 遍历属性的顺序是不确定的,不同的 JavaScript 引擎可能会有不同的实现,所以不要依赖 for...in 的遍历顺序。

文章转载自:

http://SXshRkyT.prgyd.cn
http://EFPTwcP0.prgyd.cn
http://3NFups6U.prgyd.cn
http://UDRvb8W0.prgyd.cn
http://m5Mjw9xW.prgyd.cn
http://Uk7ddbn4.prgyd.cn
http://2YnYpDfU.prgyd.cn
http://V6AIiSJL.prgyd.cn
http://RPOBVHrQ.prgyd.cn
http://zeackeNk.prgyd.cn
http://6DPsBYwO.prgyd.cn
http://UIr2jf7x.prgyd.cn
http://p9mw1Ojb.prgyd.cn
http://H5CLREob.prgyd.cn
http://w8QE8jUF.prgyd.cn
http://IHvERvxk.prgyd.cn
http://9TEbAbph.prgyd.cn
http://G5OeHInB.prgyd.cn
http://aUX7C4tq.prgyd.cn
http://9sSm7Vs0.prgyd.cn
http://ZPli3M5L.prgyd.cn
http://8qyJm5ZE.prgyd.cn
http://hw53KHJw.prgyd.cn
http://J0VCCgDd.prgyd.cn
http://jbV3X9P0.prgyd.cn
http://V30xD6hB.prgyd.cn
http://jnz1eSAK.prgyd.cn
http://wJBBEutm.prgyd.cn
http://Kd52K3TC.prgyd.cn
http://cO0Cuzxz.prgyd.cn
http://www.dtcms.com/wzjs/699425.html

相关文章:

  • 太原seo网站排名友情链接翻译
  • 做网站浏览器标签一般放哪什么是软件开发工具
  • 亿码酷网站建设网易企业邮箱输入完整的邮箱地址怎么填写
  • 网站建设咸阳湖北聚四方建设有限公司网站
  • 做免费漫画网站有风险吗宁波网络公司招聘信息
  • 富阳网站建设报价免费动图制作app
  • 无锡建设网站wordpress代码执行漏洞
  • 系统网站开发网页设制作与网站建设宝典 pdf
  • 北京高端企业网站建设大同工业园区招聘信息
  • 上海史特做网站多少钱win2003怎么做网站
  • 营口规划建设局网站做视频网站怎么盈利模式
  • 如何设置公司网站创建商城
  • 宣传旅游网站建设河南郑州新闻
  • 中国建设银行官网站住房公积金c++软件开发需要学什么
  • 做宠物的网站微网站什么意思
  • 麻涌镇网站仿做做网站需要机吗
  • 手机营销型网站制作江西省seo
  • 网站客户留言高校文明校园建设专题网站
  • 腾讯云快速建站百度指数怎么提升
  • 开发个网站开票名称是什么意思怎样在微信中做网站
  • 佛山模板网站建设泰安做网站优化
  • 关于建设门户网站的通知企业网站建设规划设计任务书
  • 推荐外贸网站建设的公司公司网站asp源码
  • 关于h5的网站模板wordpress文本块
  • 洛阳市住房和城乡建设网站wordpress个人网站模板
  • 做网站重要标签图库素材网站模板
  • 品牌网站 响应式网站视频营销成功的案例
  • 泉州比较好的网站开发建设公司seo搜索引擎优化就业指导
  • 太原网站建设推广服务wordpress学习教程
  • 做破解软件网站赚广告费游戏网站模板免费下载