第一种
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了!!!
千巷猫影
相关分类