关于堆栈,参考视频自己复习用
<script>
let a={};
let b='0';
let c=0;
a[b]='珠峰';
a[c]='培训';
console.log(a[b]);//培训
</script>
输出结果应该是 培训。
原理:
当声明a这样一个空的对象时,首先分配了一个地址在堆内存中,然后声明b为字符串0,c为数字0,在堆内存中属性名不能重复,数字属性名==字符串属性名。培训更新了珠峰,所以后面输出的结果应该是培训。
堆:存储引用类型值的空间。
栈:存储基本类型值和指定代码的环境。
<script>
let a={};
let b=Symbol('1');
let c=Symbol('1');
a[b]='珠峰';
a[c]='培训';
console.log(a[b]);
</script>
输出结果应该是珠峰。因为Symbol创建的是唯一值,所以b和c是两个独立的唯一值,互不干扰,所以输出结果应该是珠峰。
<script>
let a={};
let b={
n:'1'
};
let c={
m:'2'
};
a[b]='珠峰';
a[c]='培训';
console.log(a[b]);
</script>
输出结果应该是 培训。引用类型值都会变成字符串来存储,a[b]类型是object,a[c]同样也是object,后者会更新前者,所以输出结果是培训。