前端复习--js中对象的诡异行为

正常简单生活:

var a = {}
var b={}
a.name = 1;
->1
b.name = 2;
->2

正常稍高级情况:
var a = {}
var b = a;
a.name = 1;
a.name
->1
b.name = 2;
a.name
->2


或者你对上述状况,不屑一顾,不就是两个变量指向同一变量吗?

var a = {state: {}}

a.state
->Object {}
var b = {};
->undefined
a.state = b;    //对象等于对象,这会使a与b形成双向绑定!!!!
->Object {}
b.name = 2;
->2
a.state.name  //惊艳地发现a竟然页跟着变化!!!!
->2
a.state.name = 9  //a变化也会使b变化
->9
b

->Object {name: 9}  

//从前有一个对象var a = {state: {}},有一个坏人派出对象var b = {}取改变a本来的样子,对象b使用很猥琐的方法-他向a表示愿意在a主场见面:a.state = b;  天真a以为由主场优势,答应了;b达到目的,并在结束会面之后,改变自己体内对象:b.name = 2; a 在晚些时候感到不适,终于发现自己已经发生异化a.state.name(由无变成了1). a很恼火,它和我一样不知道为什么,以前的书里没有讲.但好消息是有对策可以防范b的攻击:

对策:

var a = {state: {}}
var b = {};
a.state = JSON.parse(JSON.stringify(b))   //安保:关键的这一步!!!,JSON会返回一个新的对象!!!!
b.name = 2; //开始实验!!!!
->2
a.state
->Object {}   //这是见证奇迹的时候!!!!
a.state = JSON.parse(JSON.stringify(b))  //b.name =2 之后,再次给a赋值
->Object {name: 2}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值