第一种var a = {m: 1};
a.x = a = {c: 2};console.log(a, a.x)上面代码在chorme中结果:{c: 2}, undefined;这个结果怎么解释?第二种var a = {m: 1};
a.x = a;console.log(a)上面代码在chorme中结果只一个无限展开的对像;上面两种情况:第一种情况我的想法是1).运算符等级比=高;所以a.x = undefined;即此时a = {m: 1, x: undefined};2)=运算符从右到左;a先被改写成{c:2};然后执行a.x = a;最后结果就会和第二种的结果一样?但是第一种的结果完全和我想的不一样!!这个过程怎么解释?然后顺带一问:对于第二种情况;我在vue的源码中也见到类似的赋值操作;这无疑导致对象的引用;对象引用听着都感觉不好;为和vue中问什么还会出现这种东西了?其带来的利弊有那些?敲代码都没这些问题;现在静下心来思考发现自己好像都不懂js了!!!
1 回答
千巷猫影
TA贡献1829条经验 获得超7个赞
你没发现a.m也没了吗?因为a被重新赋值了。
你试试下面这段程序:
var a = {m:1};var b = a; a.x = a = {c:2};console.log(a, b);
添加回答
举报
0/150
提交
取消