永发信息网

我想问哈js中的字符串的复制和引用是传值还是传地址??

答案:2  悬赏:30  手机版
解决时间 2021-03-06 20:32
  • 提问者网友:别再叽里呱啦
  • 2021-03-06 04:59
如果是传地址?那么:
var a={name:'yy',age:26};
var b=new Object();
b.name=a.name;
b.age=a.age;
a.name='xx';
console.log(typeof(b.name));//Object { name="yy", age=26}
这个中间的a.name不就是字符串嘛?
最佳答案
  • 五星知识达人网友:底特律间谍
  • 2021-03-06 05:10
这里其实就是深拷贝和浅拷贝的问题,你上边代码只是浅拷贝,当2种情况
1:涉及对象的赋值 obj = obj1
2: 涉及数组赋值 ary = ary1
那么他们是传地址的,如果改动其中一个,如改动obj.name ,那么obj1.name也是会发生变化的,自己验证一下。
你上边的情况不涉及对象的赋值,而仅仅是字符串的简单复制,用浅拷贝就行了,当你上边变动一下,
var a={name:'yy',age:26};
b=a;
var b=new Object();
那么就要考虑深拷贝了 a = b.clone() // Object.prototype.clone()重写
不然改动a.name ,b.name也发生变化
原理我解释一下: 涉及对象和数组, b = a ; 那么b 放弃了new Object的地址,替换成指向a创建的{name:'yy',age:26}存放的地址 ,而 b.name=a.name b和a的地址不一样,所以a.name改变不影响b.name
正确与否,自己写个例子验证
全部回答
  • 1楼网友:你可爱的野爹
  • 2021-03-06 06:26
b.name 应该是字符串吧, “yy”,你再打印下看看 再看看别人怎么说的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯