第一种情况(保存引用至变量a,在修改变量a的值
):
var obj = [
{
name:
{
test: 'nihao'
}
}
];
// 未修改的对象
console.log('原始对象:' , JSON.parse(JSON.stringify(obj)));
// 保存引用
var data = obj[0]['name'];
// 修改
data = 'hello'; // 修改不会作用到对象 obj !!
console.log('修改name属性后的对象:' , JSON.parse(JSON.stringify(obj)));
上面代码执行结果预览:
第二种情况(不保存引用,直接修改
):
var obj = [
{
name:
{
test: 'nihao'
}
}
];
// 未修改的对象
console.log('原始对象:' , JSON.parse(JSON.stringify(obj)));
// 不保存引用后修改,即直接修改
obj[0]['name'] = 'hello'; // 能够作用到对象 Obj!!
console.log('修改name属性后的对象:' , JSON.parse(JSON.stringify(obj)));
上面代码运行结果预览:
为什么会出现如此奇葩的现象??我实在不太明白....,求解惑
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
data
直接被赋值为hello
了,和obj[0]['name']
无关第一种情况
你把
obj[0]['name']
看做A,'hello'
看做 B, 第一步data指向A的引用地址,第二步,data指向了B的引用地址。你会发现两步操作只是data的指向变了而已,A 并没有改变,所以 对象obj不会改变。第二种情况
这个通过取值并赋值,直接修改属性,当然直接修改对象Obj
其实这是js基础,推荐篇文章:( JS 进阶 )基本类型 引用类型 简单赋值 对象引用
第一种情况
var data = obj[0]['name'];
data是字符串类型。直接复制一个内存地址,所以修改data的值不影响obj;第一种情况
obj[0]['name'] = 'hello';
已经改变了obj的内容,obj自然会变化。