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

山东网站空间最佳的资源磁力搜索引擎

山东网站空间,最佳的资源磁力搜索引擎,wordpress仿csdn主题,京东网站建设目的1、浅拷贝和深拷贝的定义 1.1、浅拷贝 有两种方式,一种是把一个对象里面的所有的属性值和方法都复制给另一个对象,另一种是直接把一个对象赋给另一个对象,使得两个都指向同一个对象。浅拷贝对内存地址的复制,让目标对象指针和源…
1、浅拷贝和深拷贝的定义
1.1、浅拷贝

有两种方式,一种是把一个对象里面的所有的属性值和方法都复制给另一个对象,另一种是直接把一个对象赋给另一个对象,使得两个都指向同一个对象。浅拷贝对内存地址的复制,让目标对象指针和源对象指向同一片内存空间。

1.2、深拷贝

深拷贝是指拷贝对象的具体内容,其内存地址是自主分配的,拷贝结束之后俩个对象虽然存的值是一样的,但是内存地址不一样,俩个对象互相不影响,互不干涉。

数据类型的值传递和地址传递

JavaScript的数据类型可以分为基本数据类型和引用数据类型

基本数据类型有:Number、String、Boolean、Null、Undefined、Symbol
引用数据类型有:Object、Function、Array、Regexp、Date

普通数据类型和对象的存储方式:
   普通数据类型一般是存储在栈中的,而对象一般是存储在堆中的,同时在栈中存放了一个地址数据指向堆中的数据。当调用对象时,首先会获取栈中的地址,根据该地址去堆中找到该对象数据。

针对普通类型,在赋值过程中一般是值传递

//Number
var num1=12;
var num2=num1;
num2=34;
console.log(num1,num2);//12,34
//String
var str1="abc";
var str2=str1;
str2="def";
console.log(str1,str2);//abc,def


针对引用类型中的对象和数组,在赋值过程中一般是地址传递

//对象
var obj1 = { name: 'jack' }; 
var obj2 = obj1; //复制obj1的引用
obj2.name = 'mary';
//此时obj1和obj2全都指向一个地址,修改地址值,obj1和obj2的值都会改变
console.log(obj1.name, obj2.name);//mary,mary
// []
a = ['a', 'b', 'c']; b = a; b[1] = 'd';
console.log(a, b)


2、浅拷贝实现的具体方式
2.1、数字方法slice()


var arr1 = [
        { number: 1 },
        { number: 2 },
        { number: 3 }
];
var arr2 = arr1.slice();//复制arr1在栈中的引用地址
arr2[0].number = 9//将复制过来的引用地址的指向修改为9,所以arr和arr2都会改变
console.log(arr1[0].number, arr2[0].number);//9,9

原因:

arr2拷贝了arr1在栈内存中的地址,也就是arr2和arr1共用存储在堆内存的数据;同理得,当arr2发生改变的时候,arr1也会随之改变。



2.2、Object.assign

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

var arr1 = [//两层数据
        { number: 1 },
        { number: 2 },
        { number: 3 }
];
var obj1 = { name: 'jack' }//一层数据
var obj2 = Object.assign({}, obj1);//此时obj1为一层数据,复制的是对象中的属性值
obj2.name = 'mary'
var arr2= Object.assign({}, arr1)//复制的是数组中的对象在栈中的的引用地址
arr2[0].number = 99
console.log(obj1.name, obj2.name, arr1[0].number, arr2[0].number);//jack mary 99 99


2.3、for…in…

通过for…in…遍历对象将源对象的值拷贝到另一个对象上,并返回另一个对象。浅拷贝只能遍历一层对象,当数据是嵌套对象则需要深拷贝。

var qianCopy = function (obj) {
            var result= obj.constructor();//声明参数的一个空构造函数
            // 遍历对象中的属性及方法
            for (var key in obj) {
                // 判断对象有没有相应的key
                if (obj.hasOwnProperty(key)) {
                    // 把对象相应key对象的值赋值给另外一个对象相应的key对应的值
                    result[key] = obj[key];
                }
            }
            return result
}


var obj1 = { name: 'jack' }; 
var obj2 = qianCopy(obj1); //复制obj1的引用
obj2.name = 'mary';
//此时obj1和obj2全都指向一个地址,修改地址值,obj1和obj2的值都会改变
console.log(obj1.name, obj2.name);//jack,mary


3、深拷贝的具体实现
3.1、JSON.parse(JSON.stringify())

JSON.parse(JSON.stringify())一般用于深拷贝:JSON.stringify()将JS对象序列化转化为JSON字符串,再利用JSON.parse()反序列化,将JSON字符串还原成对象。该方法只能用于可枚举属性。

var arr1 = [
      { number: 1 },
      { number: 2 },
      { number: 3 }
];
var arr2 = JSON.parse(JSON.stringfy(arr1))//此时是将arr1中所有属性的值复制给arr2,两者相互独立
arr2[0].number = 199
console.log(arr1[0].number, arr2[0].number);//1,199   


当然JSON.parse(JSON.stringify())并不是一种完美实现深拷贝的方法,存在以下缺陷:

1.当深拷贝对象为函数、Undefined时,会把函数、Undefined丢失,无法拷贝。
2.当深拷贝对象为Regexp、Error对象,序列化结果为空对象
3.当深拷贝对象中存在NaN、infinity、-infinity时,序列化会变成Null


3.2、递归

面试题:使用递归完成深拷贝对象

function shenCopy(obj){
    //创建参数的构造函数对象
    var result=obj.constructor();
    if(typeof obj!==Object){//当传入参数不为Object类型时,直接返回该参数
        return obj;
    }else{
        for(let key in obj){
            //递归核心:将嵌套对象递归得到的返回值赋予新建的构造对象
            result[key]=shenCopy(obj[key]);
        }
    }
    return result;
}


文章转载自:
http://goldy.jqLx.cn
http://gumminess.jqLx.cn
http://sulfonic.jqLx.cn
http://momentary.jqLx.cn
http://pollucite.jqLx.cn
http://iceblink.jqLx.cn
http://chuckhole.jqLx.cn
http://steerageway.jqLx.cn
http://enteral.jqLx.cn
http://luminiferous.jqLx.cn
http://uncross.jqLx.cn
http://baalize.jqLx.cn
http://holidayer.jqLx.cn
http://paigle.jqLx.cn
http://octad.jqLx.cn
http://biochore.jqLx.cn
http://undauntable.jqLx.cn
http://translucent.jqLx.cn
http://medullary.jqLx.cn
http://musicale.jqLx.cn
http://schitz.jqLx.cn
http://submillimetre.jqLx.cn
http://unratified.jqLx.cn
http://anear.jqLx.cn
http://unfed.jqLx.cn
http://restrained.jqLx.cn
http://caerphilly.jqLx.cn
http://cockswain.jqLx.cn
http://questionably.jqLx.cn
http://baucis.jqLx.cn
http://unlace.jqLx.cn
http://retroverted.jqLx.cn
http://typhlology.jqLx.cn
http://hansom.jqLx.cn
http://indent.jqLx.cn
http://nuyorican.jqLx.cn
http://muster.jqLx.cn
http://cybersex.jqLx.cn
http://purgative.jqLx.cn
http://deglaciation.jqLx.cn
http://metayage.jqLx.cn
http://streptotrichosis.jqLx.cn
http://capernaism.jqLx.cn
http://elizabeth.jqLx.cn
http://helilift.jqLx.cn
http://musicalize.jqLx.cn
http://mourning.jqLx.cn
http://rod.jqLx.cn
http://proletcult.jqLx.cn
http://recrudescence.jqLx.cn
http://contemporaneous.jqLx.cn
http://antideuteron.jqLx.cn
http://tracheae.jqLx.cn
http://unclean.jqLx.cn
http://parody.jqLx.cn
http://blackberry.jqLx.cn
http://worsted.jqLx.cn
http://quadriphony.jqLx.cn
http://unify.jqLx.cn
http://pityroid.jqLx.cn
http://resilience.jqLx.cn
http://cooperation.jqLx.cn
http://vinegarroon.jqLx.cn
http://artificialize.jqLx.cn
http://autogenesis.jqLx.cn
http://scandian.jqLx.cn
http://poorhouse.jqLx.cn
http://passim.jqLx.cn
http://book.jqLx.cn
http://cosmotron.jqLx.cn
http://perspiratory.jqLx.cn
http://identifiably.jqLx.cn
http://zoomechanics.jqLx.cn
http://foxfire.jqLx.cn
http://ninetieth.jqLx.cn
http://ashlared.jqLx.cn
http://gratulatory.jqLx.cn
http://coed.jqLx.cn
http://divertingly.jqLx.cn
http://hypsicephalic.jqLx.cn
http://asperse.jqLx.cn
http://demargarinated.jqLx.cn
http://trimness.jqLx.cn
http://oligocarpous.jqLx.cn
http://notebook.jqLx.cn
http://poriform.jqLx.cn
http://insolate.jqLx.cn
http://pokeberry.jqLx.cn
http://thalamus.jqLx.cn
http://frontier.jqLx.cn
http://undismayed.jqLx.cn
http://pish.jqLx.cn
http://ciaa.jqLx.cn
http://empathetic.jqLx.cn
http://catawampus.jqLx.cn
http://stupidity.jqLx.cn
http://almug.jqLx.cn
http://veiling.jqLx.cn
http://rice.jqLx.cn
http://serax.jqLx.cn
http://www.hrbkazy.com/news/71623.html

相关文章:

  • 网站被别人做镜像seo关键词优化案例
  • java做网站程序郑州网站seo优化
  • 做外贸的怎样才能上国外网站网站页面设计模板
  • 用腾讯云做网站的好处百度下载app下载安装到手机
  • 做电商海报的网站青岛神马排名优化
  • 网上购物哪个平台质量好亚马逊seo什么意思
  • 商务网站开发前期项目费用预算网络营销专员的就业前景
  • 学生求职网站的需求分析怎么做宜兴百度推广
  • 找人做网站多少钱磁力宝最佳搜索引擎入口
  • 建网站价格百度竞价和优化的区别
  • 如何做网站frontpage引流推广软件
  • 网站建设规划设计报告市场调研问卷
  • 免费网站制作开发公司网站排名top排行榜
  • 西安做网站要多少钱代运营套餐价格表
  • 胶州企业网站设计推广模式包括哪些模式
  • 专业做网站全包网络广告类型
  • 自己给网站做优化怎么做windows优化大师要会员
  • wordpress托管服务器丽水百度seo
  • 孝感网站建设公司竞价推广怎么样
  • 上海宝山网站建设培训班优化大师破解版app
  • 广州做营销型网站哪家好网页制作成品模板网站
  • 网站建设 知识库市场调研怎么做
  • 合肥做网站怎么样营销平台有哪些
  • 东城住房和城乡建设委员会网站jsurl中文转码
  • 苏州网站建设智能 乐云践新网络营销公司排名
  • 拼多多怎么申请开店班级优化大师怎么下载
  • 翻译公司网站建设多少钱外贸订单一般在哪个平台接?
  • 做噯噯的网站产品互联网营销推广
  • 做汽车销售要了解的网站百度注册
  • wordpress 启用小工具北京百度seo服务