猿问

js对象引用

第一种

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了!!!


守着一只汪
浏览 376回答 1
1回答

千巷猫影

你没发现a.m也没了吗?因为a被重新赋值了。你试试下面这段程序:var a = {m:1};var b = a; a.x = a = {c:2};console.log(a, b);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答