# 第一题

let a = {}, b = '0', c = 0;
a[b] = '珠峰';
a[c] = '培训';
console.log(a[b]); // --> 培训

# 解析:

堆:存储引用类型值的空间

栈:存储基本类型值和执行代码的环境

# 要点:

1、 对象的属性名不能重复

2、数字属性名===字符串属性名

# 延伸问题

1、对象和数组的区别?

答:对象和数组都可以用来表示数据的集合,它们之间几个比较明显的区别是:

  1. 数组是有序的数据集合,对象是无序的数据集合;
  2. 数组的数据是没有名称的,但是对象的数据有名称(属性名)
  3. 两者都可以使用下标的方式读取值,但是数据的下标只能是数字,但是对象的下标可以是字符串或者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'

Last Updated: 5/30/2022, 3:18:49 PM