首页 > 试题广场 >

以下为一段浏览器中可运行的Javascript 代码,则运行

[单选题]
以下为一段浏览器中可运行的Javascript 代码,则运行该段Javascript代码的页面弹出框中显示的结果是:()
var obj = {"key":"1","value":"2"}; 
var newObj = obj; 
newObj.value += obj.key; 
alert(obj.value);

  • 2
  • 12
  • 3
  • 21
推荐
D

已知 
newObj.value = 2;
obj.key = '1'; newObj.value += obj.key; 相当于 newObj.value = newObj.value + obj.key;  所以

'2' + 1 
在javascript中自动转化为字符串拼接操作得到
'21'

编辑于 2015-02-03 21:03:36 回复(15)
obj是JS对象,对象由键和值组成,操作以地址进行。
var newObj = obj相当于两个对象指向同一个地址,修改其中任何一个,另外一个也会受到影响。
发表于 2015-10-05 11:13:06 回复(6)
{"key":"1","value":"2"}是电视
newObj是遥控器1
obj是遥控器2
用哪个遥控,都能改变电视的台。

发表于 2017-04-15 21:19:08 回复(1)
这道题中最重要的就是var newObj=obj这句代码
这句代码的意思是:将变量obj中保存的地址拷贝一份放到变量newObject中,
那么此时变量obj和变量newObj都指向同一片堆内存空间
也就是说通过变量obj和变量newObj都可以访问到那片堆内存空间
也就是说通过这两个变量都能对堆内存中的数据进行修改
(注:此处需要读者对对内存和栈内存有所了解)
发表于 2018-07-18 15:43:56 回复(0)
对象属性以字符串形式返回!
发表于 2016-09-02 18:56:14 回复(0)
发表于 2017-06-24 22:58:01 回复(0)
newObj.value += obj.key; 这里是字符串拼接,obj.key为‘2’,newObj.value为‘1’,处理后就是‘21’重新赋给newObj.value,由于指向的是同一地址,所以obj.vaule也是'21'
发表于 2016-05-24 10:13:56 回复(2)
D;newObj=obj;
当改变obj的属性值时,newObj相应的属性值也会改变;
2个对象的地址一样;共用同一个地址;

发表于 2015-05-07 11:08:21 回复(0)
首先了解浅拷贝的概念,newObj=obj;其实这两者指的是同一片内存,改变其中的一个另一个也会改变。
所以我们想要拷贝对象,不能简单的赋值,要写一个深拷贝函数,或者通过简单JSON方法重新为新对象开辟一个地址。
其次obj的value是一个string型,所以两个string相加,实际上是拼接起来的,所以答案是12
发表于 2018-03-20 13:10:03 回复(0)
var obj = {"key":"1","value":"2"};
var newObj = obj;
newObj.value += obj.key;//注意这里的坑——字符串加法连接字符串
alert(obj.value);

编辑于 2019-09-23 19:38:47 回复(0)
//obj为JS对象
var obj = {"key":"1","value":"2"};
//newObj即为obj
var newObj = obj; 
//obj.key为字符串1
//obj.value为字符串2
//newObj.value为字符串2
newObj.value += obj.key;
//newObj.value = newObj.value+obj.key即newObj.value = “2”+“1”,也即21
//obj.valuenewObj.value
alert(obj.value);
发表于 2019-05-15 22:42:05 回复(0)
var newObj = obj是赋值语句,把newObj指向obj对象所在内存的地址
已知newObj.value的值为字符串"2",obj.key为字符串"1"
所以结果为alert("2"+"1"),即21
发表于 2018-01-24 09:56:10 回复(0)
obj是json格式的对象,对象是复杂的数据类型,所以当用等号赋值的时候都会指向一个对象,操作newobj和obj效果一样,其次是obj.key取出来的都是字符串,字符串和什么的加法操作都是字符串的连接,所以是21。本题涉及两个问题
发表于 2017-11-30 16:21:54 回复(0)
Mr~头像 Mr~
注意是字符串!!!!
发表于 2017-09-24 21:34:18 回复(0)
因为obj是对象,是引用类型值,然后后来又把obj赋值给了newObj,相当于这两个都指向了同一个地址,所以这两个的操作都能改变这个obj对象,所以最后输出的是拼串的“21”
发表于 2017-06-01 22:53:29 回复(0)
引用类型的赋值,赋予的是对象在堆内存中的地址存放在变量名的栈内存中。所以当 newObj.value += obj.key; 执行时,是改变了存在 newObj这个栈内存中的堆地址对应的对象的value的值,因为 obj中存放的地址和newObj中的是一样的。
所以当再去访问这个堆地址中的value,自然已经被改变了。
发表于 2017-03-25 21:32:08 回复(0)
赋值给newobj的是obj的地址
发表于 2016-11-25 00:03:19 回复(0)
大家的讨论好棒哦。刷题目,学习知识。很有收获。
对象,地址,自动转换。
发表于 2016-08-23 18:36:38 回复(0)
value的类型由number变成了string
发表于 2015-05-27 10:51:27 回复(1)
+字符串操作,其余转化成数字操作
发表于 2019-09-20 17:22:03 回复(0)
key和value是字符串类型,字符串拼接
发表于 2019-05-12 12:59:08 回复(0)