JavaScript对象

1、对象的复制和引用
与原始类型相比,对象的根本区别之一是对象是通过‘引用’被存储和复制的,与原始类型相反。字符串、数字、布尔值始终是以整体的形式被复制的。
赋值了对象的变量,存储的不止对象本身,而是该对象在内存中的地址,换言之就是对该对象的引用。
对于对象的引用,我们可以通过其中任意一个引用变量来访问对象并修改它的内容。

想要复制一个对象,需要创建一个新对象,并通过遍历所有现有属性的结构,在原始类型值的层面,将其复制到新对象,来复制已有对象的结构
例如:function cloneDeep = (data:object){
let newObject = {}
for(let key in data){
newObject[key] = data[key]
}
}

我们也可以使用Object.assign方法来实习克隆对象和合并多个对象。
例如:Object.assign(data,[src1,src2])
data是指目标对象,后面的参数是源对象,后面可传递多个参数,返回data。该方法将多有源对象的属性拷贝到目标对象中,如果属性已存在,则会被覆盖。

使用Object.assign方法替代for…in进行简单克隆
let clone = Object.assign({},data)

当对象的属性都是原始类型时,可使用以上方法克隆,但当属性是对其他对象的引用时,我们需要就进行深克隆,检查每个data[key]的值的克隆循环,如果值是一个对象,也要复制它的结构。

深克隆可以通过递归来实现,为了避免重复造轮子,可以使用JavaScript库lodash中的_cloneDeep(obj)来实现。

垃圾回收机制

对于开发者来说JavaScript的内存管理,是自动的、无形的,而我们创建的原始值、对象、函数…都会占用内存,当程序提出要求,系统就会释放内存。

内存泄漏:对于一些不再用到的内存,不能做到及时释放,就称为内存泄漏,如果不能及时释放内存,内存占用越来越高,轻则占用内存,重则导致进程崩溃。

JavaScript中内存管理概念主要的是可达性,可达值是指那些以某种方式可访问或者可用的值,它们一定存储在内存中。JS标记内存中可达的值,通过垃圾处理器,删除掉所有不可达的对象。

常见垃圾回收方法:
1、标记清除:当变量进入环境时,就标为”进入环境“,当变量离开环境时,就标为”离开环境“,标记”离开环境“的就回收内存。这种方法将所有变量都进行标记,进而进行删除操作。
2、引用计数:跟踪记录每个值被引用的次数,每次一个值被引用,则它的计数+1,当引用次数为0,说明没办法引用该值,当垃圾收集器下一次循环运行时,就会释放引用次数为0的内存。

判断内存泄漏,当连续五次执行垃圾回收机制后,内存占用一次比一次大,则存在内存泄漏的情况,需要实时查看内存占用。

对象方法”this“:
在方法中使用this关键字,this指的是当前的对象。两个不同的对象同时调用相同的this,函数内部的this是” . “符号之前的对象。在没有对象声明的情况下,调用this == undefined,在非严格模式下,this是指全局对象。
箭头函数没有this,箭头函数内部使用的this,是外部获取的正常函数。

构造函数

构造函数的规定:函数命名以大写字母开头,它们只能由”new“操作符来执行。构造函数的目的是实现可重用的对象创建代码。

当一个函数被”new“操作符执行时的顺序:
1、一个新的空对象被创建并分配给this,
2、函数体执行,通常它会修改this值,为其添加新属性,
3、返回this值。

通常,构造器没有return,它的任务是将所有必要的东西写入this,并自动转换为结果。如果有return,return返回的是对象,则该对象覆盖this,如果返回的是原始类型,则忽略,仍返回this。

function User (){} ; let name = new User()

可选链:?.
如果可选链?.前面部分是undefined或者null,则停止运算并返回该部分。三种用法如下:
1、obj?.prop – 如果obj存在则返回obj.prop,否则返回undefined。
2、obj?.[prop] – 如果obj存在则返回obj[prop],否则返回undefined。
3、obj.method?.() – 如果obj.method存在则调用obj.method(),否则undefined。

JavaScript学习笔记1相关推荐

  1. Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  2. Java程序猿的JavaScript学习笔记(汇总文件夹)

    最终完结了,历时半个月. 内容包含: JavaScript面向对象特性分析,JavaScript高手必经之路. jQuery源代码级解析. jQuery EasyUI源代码级解析. Java程序猿的J ...

  3. JavaScript学习笔记(五)

    JavaScript学习笔记(五) ①Array类 本地对象 ②Date类 ①Global对象 对象的类型   内置对象 ②Math对象 宿主对象 今天继续学习JS中的对象,昨天内置对象Global对 ...

  4. JavaScript学习笔记(备忘录)

    JavaScript学习笔记(备忘录) ===运算符 判断数值和类型是否相等.如: console.log('s'==='s') //输出trueconsole.log('1'===1) //输出fa ...

  5. Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  6. JavaScript学习笔记(十)——学习心得与经验小结

    JavaScript学习笔记(十)--学习心得与经验小结 目前我先列好提纲,利用每晚和周末的闲暇时间,将逐步写完 ^_^ 转载于:https://www.cnblogs.com/mixer/archi ...

  7. JavaScript 学习笔记(1)

    1.     何为 Jscript JScript 是一种解释型的.基于对象的脚本语言. 局限性: 1)        不能使用该语言来编写独立运行的应用程序 2)        没有对读写文件的内置 ...

  8. 前端获取div里面的标签_web前端教程JavaScript学习笔记DOM

    web前端教程JavaScript学习笔记 DOM一DOM(Document Object Model): 文档对象模型 其实就是操作 html 中的标签的一些能力 我们可以操作哪些内容 获取一个元素 ...

  9. JavaScript学习笔记之数组(二)

    JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...

  10. JavaScript学习笔记(七)——厚积薄发之小成果

    JavaScript学习笔记(七)--厚积薄发之小成果 目前我先列好提纲,利用每晚和周末的闲暇时间,将逐步写完 ^_^ 转载于:https://www.cnblogs.com/wdpp/archive ...

最新文章

  1. 文件夹差异文件对比工具 meld
  2. MFC最小程序(不使用应用程序向导)
  3. Android Animation动画效果简介
  4. 哔哩哔哩swot分析_哔哩哔哩2020校园招聘游戏运营笔试真题
  5. 怪兽级性能,用代码玩转Excel!葡萄城强势发布Spread表格组件
  6. 标准 mysql 数据库 jdbc 的两种写法 懒汉式 和 饿汉式
  7. Remote Desktop Manager for Mac(远程桌面管理)
  8. P ⊆ co-NP的原因
  9. POI设置excle单元格样式
  10. 用友通总账问题维护精粹
  11. 谷歌浏览器如何在不登录的情况下保存书签
  12. 串口485接法图_485通讯接线方式
  13. 网络模型可视化工具netron
  14. 物联网和边缘部署的5大嵌入式工控机设计要求
  15. 计算机相关国外期刊,计算机 国外期刊
  16. 影像信息提取之——DEM提取
  17. 如何升级自己的思维,成为你想成为的自己? ----《少有人走的路》讀後感
  18. Flash 多人在线游戏教程 - TicTacToe
  19. imagenet 1000分类
  20. 安卓开发入门教程!终于有人把安卓程序员必学知识点全整理出来了,附答案

热门文章

  1. Springboot企业工资管理系统r9a51计算机毕业设计-课程设计-期末作业-毕设程序代做
  2. 红孩儿工具箱-Honghaier Game Tool
  3. 广州优漫动游公司:UI设计中的ps要学多久
  4. Opencv实战——图像拼接
  5. RS232 RS485 TO ETH TCP-Modbus 测试
  6. SQL挂起,sql2000安装挂起,SQL2000安装挂起问题,sql
  7. Mathtype卸载问题,使用期限、还有与word关联问题,The MathType DLL cannot be found.问题解决方法、查找office安装路径
  8. mysql 树莓派3 性能_树莓派 3b 的性能怎么样?
  9. 文件太大无法复制到U盘的解决方法教程
  10. 基于风光储能和需求响应的微电网日前经济调度(Python代码实现)【1】