首页 > 试题广场 >

下面代码弹出的结果为:

[单选题]
下面代码弹出的结果为:
var obj = {m:10};
var obj2 = obj;
obj.a = obj2 = {n:20};
alert(obj.a);
alert(obj.m);
  • undefined,10
  • object,10
  • 20,20
  • 20,10
有一点要注意的,alert不能表示object,但console可以打印出来
发表于 2019-08-11 16:39:53 回复(1)
var a = {n:1}; var b = a; a.x = a = {n:2}; 最后这句a.x = a = {n:2} 先执行a.x,此时a和b均共享{n:1}的栈指针,于是{n:1}变为{n:1,x:undefined}; 接着执行a = {n:2},此时a不再和b共享同对象的指针而是指向新对象{n:2}。 下一步 a.x = a 是最关键的地方,关键之处在于这两个“a”已经是完全不一样的东西,前者(其实可以把它看成b)指向{n:1,x:undefined},后者指向{n:2}。 执行这一步,{n:1,x:undefined}这个对象(b指向的对象)变为{n:1,x:a} 而a只是指向{n:2}。
发表于 2020-10-26 15:36:04 回复(0)
.运算,是访问成员,优先级高于赋值运算,obj.a = obj2 = {n:2}的运算顺序是:1⃣️访问obj的a属性,undefined 2⃣️为obj2赋值{n:2},3⃣️为obj的a属性赋值{n:2}
发表于 2018-08-25 16:47:20 回复(0)