第六章 javascript对象(object)的介绍和使用

一、对象的概念和特点

  1. 对象:是一种复杂数据,是数据的打包形式
    • 无序集合,object对象,花括号形式
      • 以键值对的形式存在,键和值一一对应,使用冒号连接,键值对之间使用逗号隔开
      • 键:key,要遵守变量的命名规则,一个对象中不允许出现重复的键
      • 值:value,就是正常数据
      • 使用场景:一般用来打包非同类但属于同一个个体的数据
        • 一个班级中某一个学生的所有信息
        • 姓名,性别,年龄,手机号,住址
    • 有序集合,array对象,中括号形式
      • 数据之间默认以索引的形式,进行标记,索引从0开始,到length-1
      • 使用场景:一般用来打包同类数据
        • 一个班级所有学生的姓名
        • 姓名,姓名,姓名
  2. 特点:
    • 提升了数据的查找速度
    • 提升了数据的传输速度
  3. 本质:键值对
    • 键和值成对出现,键和值使用冒号连接,键值对之间使用逗号隔开,使用花括号做包裹
    • {name:"admin",age:18,sex:"男"}
  4. 意义
    • 存储数据
    • 编程(面向对象编程)

二、对象的创建

  1. 字面量:var obj = { }
  2. 构造函数:var obj = new Object()

三、对象的操作语法

  1. 点语法:当对象的键为具体的值时
    • 获取对象属性:obj.name
    • 设置对象属性:obj.age = 18
    • 删除对象属性:delete obj.name
  2. 中括号语法:当对象的键为不具体的值,为变量中的值时
    • 获取对象属性:obj[key]
    • 设置对象属性:obj[key] = "hello"
    • 删除对象属性:delete obj[key]
    • key为变量

四、对象的遍历

  1. for-in语句
var obj = {
    
    
  name:"admin",
  age:18,
  sex:"男"
}

for(var key in obj){
    
    
  // 对象的键
  console.log(key)
  // 对应键的值
  console.log(obj[key])
}

五、数据类型分类

  1. 基本类型(值传递):string,number,boolean,undefined,null
    • 只占用了栈,没有使用堆
    • 拷贝时,只拷贝值。值就是地址,地址就是值,等同于完全拷贝(深拷贝)
    • 也叫:值传递的数据
  2. 复杂类型(引用传递):object,function
    • 变量名存在栈中,数据存在堆中
    • 拷贝时,默认只拷贝地址。地址是地址,值是值,浅拷贝
    • 也叫:引用传递的数据

六、内存的栈堆

  1. 栈:变量名,地址,空间相对较小,稳定,不可修改
  2. 堆:数据,空间相对较大,可以修改
  3. 栈和堆的关系:一一对应,能多对一,不能一对多
    • 栈中保存了堆的地址
  4. 栈堆的存取规则(了解)
    • 栈的存取规则:先进后出
    • 堆的存取规则:先进先出

七、深浅拷贝

  1. 浅拷贝:拷贝的是地址,修改拷贝之后的数据会影响拷贝之前的数据
    • 复杂数据(引用传递)默认浅拷贝
  2. 深拷贝:拷贝的是值,不拷贝地址,修改拷贝之后的数据不影响拷贝之前的数据
    • 基本数据(值传递)默认深拷贝
    • 深拷贝复杂数据:遍历要拷贝的复杂数据,解析出每个键和值,逐个拷贝值
      • 简单深拷贝:只深拷贝一层或若干层的复杂数据的值
var obj1 = {
    
    name:"admin", age:18}
// 浅拷贝
var obj2 = obj;
obj2.name = "root"
console.log(obj1)			// {name:"root", age:18}
console.log(obj2);		// {name:"root", age:18}
console.log(obj1 === obj2);		// true

// 深拷贝
var obj3 = {
    
    };
for(var i in obj1){
    
    
    obj3[i] = obj1[i];
}
obj3.name = "root";
console.log(obj1)			// {name:"admin", age:18}
console.log(obj3);		// {name:"root", age:18}
console.log(obj1 === obj3);		// false

猜你喜欢

转载自blog.csdn.net/weixin_41636483/article/details/135148909