浅谈JS对象数据类型基础

145 阅读2分钟
复习:数据类型分类

JavaScript的数据类型可以分为两类,分别是基本数据类型和引用数据类型。
基本数据类型分为以下8个:

  • number
  • string
  • boolean
  • undefined
  • null
  • symbol (ES6)
  • bigint (ES10)

引用数据类型object,又细分为以下三种:

  • function
  • array
  • object

对象的定义

这次谈谈引用数据类型中的object类型。可以直接定义,也可以在定义后给对象添加属性:

//直接定义创建对象
var poem = {
    title : '静夜思',
    author: '李白'
}

//也可以在创建对象后,给对象添加属性
poem.dynasty = '唐';

对象属性的访问

对象的取值有两种方法,一种是点(.)直接访问对象的属性,另一种是用中括号([]),中括号中可以直接写对象属性的字符创,也允许再写一个变量:

var poem = {
    title : '静夜思',
    author: '李白'
}

//通过点的方法直接获取对象属性
console.log(poem.title); 

//通过中括号获取,直接使用属性名
console.log(poem['title']);

//通过中括号获取,允许使用变量
var prop = 'title';
console.log(poem[prop]);

使用点号必须事先就明确对象的属性名,但如果对象的属性名是动态变化或者未知的,此时使用中括号加变量的方法可以提升代码的灵活性。


"引用"的理解

引用数据类型,怎么理解这个“引用”呢?下面这段代码给出了很好的解释:

var a = 'world';
var b = a;
a = 'hahaha';
console.log(b);  //输出:world

var c = {hello:'world'};
var d = c;
c.hello = 'hahaha';
console.log(d.hello);  //输出:hahaha

我的理解是:
第一段代码中,基本数据类型存储在了栈内存中,当我新定义一个b,并赋值等于a时,实际上是栈内存中开辟了一块新区域存放b,因此改变a和b的值,不会互相影响。
第二段代码中,对象是存储在堆内存中,c在栈内存中存储的对象的内存地址。当我定义一个d等于c时,新开辟的栈内存存放的也是c对象的内存地址。因此,当我改变c所引用的对象的某个属性值时,d不会改变引用对象的内存地址,因此输出的值也会跟着改变。因此,对引用数据类型用“=”赋值时需要谨慎。