const a = {};
function clear(obj) {
obj.x = 40;
obj = null
}
clear (a);
console.log(a)
为什么输出到控制台{x: 40}
而不是null
?
const a = {};
function clear(obj) {
obj.x = 40;
obj = null
}
clear (a);
console.log(a)
为什么输出到控制台{x: 40}
而不是null
?
obj
是函数的局部变量clear
。在您的情况下,它实际上是对对象的引用a
。所以当你改变一个对象obj
的属性时,对象的属性也会改变a
。但是,当您更改局部变量本身obj
时,它只会失去与对象的连接a
并开始指向其他东西,但这a
不会以任何方式影响对象。如果这意味着javascript中的对象是否可以为空,那么在我看来不是。在 JavaScript 中,null 不是“对不存在的对象的引用”或“空指针”,就像在其他一些语言中那样。只有proto属性,即对象的隐藏 [[Prototype]] 属性的历史确定的 getter/setter 可以为 null。确认我的话 - 第二个密码。如果问题更简单,那么在函数的第一行中清除 obj = a,并在第二行中将 obj 重新分配为 null,这就是 console.log(obj) 显示的内容。
因为 obj 是全局范围的常量, - 更改内容不会导致错误,但重新分配会。也就是说,obj 是一个引用可变对象的常量。对象本身可以更改
但常数本身不能改变