博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对 JavaScript 中的 5 种主要的数据类型(包括 Number、String、Object、Array、Boolean)进行值复制
阅读量:3917 次
发布时间:2019-05-23

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

/***测试数据*/ const num = 123const str = 'we'const arr = [12,34,56]const obj = {
a: 1, b: true, c: {
d: 'li' }}const bo = true/***写法1*/ Object.prototype.clone = function() {
// 数值型:字符串、数字、布尔值 if (this instanceof String || this instanceof Number || this instanceof Boolean) {
return this } // 引用型 const o = this.constructor === Array ? [] : {
} for (var e in this) {
if (e !== 'clone') {
o[e] = typeof this[e] === 'object' ? this[e].clone() : this[e] } } return o}const num1 = num.clone()console.log(num1)const str1 = str.clone()console.log(str1)const arr1 = arr.clone()console.log(arr1)const obj1 = obj.clone()console.log(obj1)const bo1 = bo.clone()console.log(bo1)/***写法2*/ function clone(arg) {
// 数值类型 if (['number', 'string', 'booblean'].includes(typeof arg)) {
return arg } // 引用类型 const o = arg instanceof Array ? [] : {
} for (let key in arg) {
o[key] = typeof arg[key] === 'object' ? clone(arg[key]) : arg[key] } return o}console.log(clone(num))console.log(clone(str))console.log(clone(arr))console.log(clone(obj))console.log(clone(bo))/***写法3*/ function clone1(arg) {
if (arg instanceof Array) {
const arr = [] let i = arg.length while (i--) {
arr[i] = clone1(arg[i]) } return arr } else if (arg instanceof Object) {
const o = {
} for (let key in arg) {
// console.log(key, arg[key] instanceof Function, '=====000') if (arg[key] instanceof Function) {
// 此处加这个判断是因为写法一中给Object的原型加上了clone方法,需要剔除掉,不然会报错 continue } else {
o[key] = clone1(arg[key]) } } return o } else {
return arg }}console.log(clone1(arr))console.log(clone1(num))console.log(clone1(str))console.log(clone1(bo))console.log(clone1(obj))

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

你可能感兴趣的文章
玩转git-flow工作流-分支解析
查看>>
灵魂拷问:你和大佬,技术差距有多大?
查看>>
年终将至,回顾我们一起走过的 2020
查看>>
开源·共享·创新|2020年中国.NET开发者大会圆满收官!
查看>>
C# 9 新特性——init only setter
查看>>
什么是ASP.NET Core静态Web资产?
查看>>
如何在 C# 中使用 反射
查看>>
银河麒麟V10入选2020中国十大科技新闻
查看>>
Windows Terminal 新手入门
查看>>
IdentityServer4 之Client Credentials走起来
查看>>
腾讯公测云开发低码!实战评测
查看>>
.NET 5 开源工作流框架elsa技术研究
查看>>
C#-WinForm跨线程修改UI界面
查看>>
Amazing 2020
查看>>
代码改变世界,也改变了我
查看>>
【Git】Git-常用命令备忘录(一)
查看>>
2021,未来可期
查看>>
阿星Plus:基于abp vNext开源一个博客网站
查看>>
写给自己,2020的年终总结
查看>>
使用 ML.NET 识别乐高颜色块
查看>>