ECMAScript-14 【三目运算-对象克隆-浅拷贝、深拷贝】

一.三目运算

(1).基本结构

a > 0 ? console.log('大于0') //这里可以写注释
      :console.log('小于等于0');

这么写整洁一点也好写注释,也记住?后面的语句就不要加上分号了

(2).接收结果

可以直接接收结果

var str = a > 0 ? '大于0'
        :'小于0'

(3).嵌套

str = a > 0 ?(
              a > 3 ? '大于3'
                    :'小于3'
             )
             :'小于等于0'

二.对象克隆

通过外部字面量创建一个对象

再通过for-in 挨个赋值

var person1={
    name: '张三',
    age:18
}
var person2={};
for(var key in person1){
    person2[key]=person1[key];
}
person2.name='李四';
console.log(person1,person2);

三.浅拷贝、深拷贝

(1).浅拷贝

Object.prototype.num=1;
var person1={
    name:'张三',
    age:18,
    son:{
        first:'Jenney'
    },
    arr:[]
}
var person2={}
//浅拷贝
for(var key in person1){
    person2[key]=person1[key]
}
person2.son.first='cc';
console.log(person1,person2)

如果更改person2的引用属性person1也会改变  ,而且还会在person2中把原型也循环出来

(2).浅拷贝踢除原型

Object.prototype.num=1;
var person1={
    name:'张三',
    age:18,
    son:{
        first:'Jenney'
    },
    arr:[]
}
//浅拷贝
var qcappy=(function(){
    var target ={};
    var cappy=function(origin){
        for(var key in origin){
            if(origin.hasOwnProperty(key)){
                target[key]=origin[key]
            }
        }
         return target;
    }  
    return cappy;
})();
var person2=qcappy(person1);
person2.son.first='cc';
console.log(person1,person2);

(2).深拷贝

Object.prototype.num=1;
var person1={
    name:'张三',
    age:18,
    son:{
        first:'Jenney'
    },
    arr:[]
}
//深拷贝
var inhert=(function(){
    var toStr=Object.prototype.toString,
        arr='[object Array]';


   var scopy= function(origin,target){

      var obj2=target||{};
      console.log(obj2)


        for (var key in origin) {
            if (origin.hasOwnProperty(key)) {
                if(typeof(origin[key])==='object'&&origin[key]!==null){
                    obj2[key]=toStr.call(origin[key])===arr ? []: {};
                    scopy(origin[key],obj2[key])
                }else{
                    obj2[key]=origin[key]
                }
            }
        }
        return obj2;
    }
    return scopy;
}());
var person2=scappy(person1);
person2.son.first='cc';
console.log(person1,person2);

这样就解决了在拷贝对象更改引用类型值时被拷贝对象引用值会被更改的问题

(3).用json做深拷贝

var c=JSON.stringify(obj);
var d=JSON.parse(c);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值