var target = {}, source = { name: 'tom', list: ['node', 'python'] }; target.name = source.name; target.list = source.list; source.list.push('php'); console.log(JSON.stringify(target)); // {"name":"tom","list":["node","python","php"]} console.log(target.list === source.list); // true => target.list 引用了source.list source.list = [1, 2, 3]; console.log(target.list === source.list); // false target.list 不再引用 source.list // **第一个疑问**: 我的理解的是 source 新开了一个栈来存放 [1, 2, 3],这与target.list指向的不是同一个栈 所以才导致上述的结果 是吗? // 问题:给一个对象的属性赋值: var obj = { name: undefined }; obj.name = 'tom'; // **第二个疑问**: 这种方式都属性新增一个属性 而不是改变原name属性(准确来说应该是覆盖) // **第三个疑问**: 那什么是改变原来的值呢? 像数组的 push 方法 => source.list.push('php');
1 回答
烙印99
TA贡献1829条经验 获得超13个赞
[1, 2, 3] 是一个数组 也就是一个对象 它是存放在堆里的, source.list = [1,2,3] => 这个属性 指向了另一个对象 其实应该是存了一个指针 指向这个对象
不是很理解这个问题
sourc.list 会返回原来的数组 [1, 2, 3] 对这个数组进行了push操作, sorce.list = [2, 3, 4]
如果是这样的话 只是将soure.list的引用 变为 新数组[2, 3, 4] 原来的数组[1, 2, 3]并没有变化
添加回答
举报
0/150
提交
取消