# 第一题
let a = {}, b = '0', c = 0;
a[b] = '珠峰';
a[c] = '培训';
console.log(a[b]); // --> 培训
# 解析:
堆:存储引用类型值的空间
栈:存储基本类型值和执行代码的环境
# 要点:
1、 对象的属性名不能重复
2、数字属性名===字符串属性名
# 延伸问题
1、对象和数组的区别?
答:对象和数组都可以用来表示数据的集合,它们之间几个比较明显的区别是:
- 数组是有序的数据集合,对象是无序的数据集合;
- 数组的数据是没有名称的,但是对象的数据有名称(属性名)
- 两者都可以使用下标的方式读取值,但是数据的下标只能是数字,但是对象的下标可以是字符串或者Symbol类型
# 第二题
let a={},b=Symbol('1'),c=Symbol('1');
a[b]='珠峰';
a[c]='培训';
console.log(a[b]); // -->珠峰
解析:Symbol是创建唯一值的全局函数
要点:对象的属性名不一定是字符串,又可能还是一个Symbol的值
# 第三题
let a = {},
b = {
n:'1'
},
c = {
m:'2'
};
a[b] = '珠峰';
a[c] = '培训';
console.log(a[b]); // --> 培训
解析: 要点:
1、基本类型和Symbol都可以作为对象的属性名,但是数字和字符串的属于用一个属性
2、引用类型的值作为对象属性名的时候会将引用类型转换为字符串,所有引用类型转换为字符串之后都为:'object Object'
← JS基础速记 关于闭包的几道面试题 →