JavaScript从入门到精通系列第二十二篇:JavaScript中的toString方法和JavaScript中的垃圾回收

文章目录

一:toString方法

[1:怪异的返回值[object Object]](#1:怪异的返回值[object Object])

2:打印对象成为一个JSON

二:垃圾回收(GC)

1:垃圾回收概念

2:JS当中的垃圾回收机制

3:JS中的垃圾回收算法


一:toString方法

1:怪异的返回值[object Object]

当我们直接在浏览器中console.log()一个对象的时,事实上是输出对象的toString()方法的返回值。

现在这个[object Object]就是toString对象的返回值。这里边用的是Object对象的原型对象的toString方法。

javascript 复制代码
function Person(name,age,gender){
    this.name = name;
    this.age = age;
    this.gender = gender;
}

//创建一个Person实例
var per = new Person("孙悟空",18,"男");
console.log(per);

证明这件事情:

2:打印对象成为一个JSON

我们只需要给Person对象的原型对象当中增加自定义toString()方法。

javascript 复制代码
function Person(name,age,gender){
    this.name = name;
    this.age = age;
    this.gender = gender;
}

//创建一个Person实例
var per = new Person("孙悟空",18,"男");
console.log(per);

Person.prototype.toString = function (){

  return "Person[name = "+this.name+"]";
}

实践结果:

二:垃圾回收(GC)

1:垃圾回收概念

人生活的时间长了,就会产生垃圾。对象也一样,当一个对象没有任何变量或者属性对他进行引用,那么这个对象就是垃圾。这种对象过多,会占用大量的内存空间,导致内存运行变慢,甚至内存溢出等情况发生。

2:JS当中的垃圾回收机制

JavaScript中的垃圾回收机制是指当不再需要某个变量或对象时,JavaScript引擎会自动回收其占用的内存空间。在JavaScript中,需要执行以下步骤来清理不再使用的内存:

需要注意的是,由于JavaScript是一门动态语言,变量的类型和值可能会发生变化,这也可能会影响垃圾回收机制的运行。此外,如果某个变量被其他变量所引用,即使没有被直接访问,垃圾回收机制也不会自动回收其占用的内存空间。因此,在编写JavaScript代码时,应当注意避免不必要的变量引用,以便垃圾回收机制能更好地清理不再使用的内存空间。

3:JS中的垃圾回收算法

JS中的垃圾回收算法是指JavaScript引擎通过一系列算法,自动回收不再被程序使用的内存。常见的垃圾回收算法有:

  1. 引用计数算法:每个对象有一个计数器,记录有多少个引用指向该对象。当引用计数归零时该对象即被回收。但是该算法无法处理循环引用的情况,容易出现内存泄漏。

  2. 标记清除算法:从根对象开始,标记所有可以访问到的对象,在标记完成后,清除所有未被标记的对象。该算法可以处理循环引用的情况,但会造成一定的性能损失。

  3. 分代收集算法:将内存划分为几代,每次垃圾回收时,只清除年龄较大的对象。年龄较小的对象被认为是生命周期较短的,不需要进行频繁的垃圾回收。该算法通常应用于长时间运行的JS应用,提高了运行效率。

总的来说,垃圾回收算法是JavaScript引擎的重要组成部分,它可以保证程序运行过程中不会因为内存泄漏而产生错误。不同的算法有不同的优缺点,选用合适的算法可以提高程序的运行效率。

相关推荐
行思理9 分钟前
go语言应该如何学习
开发语言·学习·golang
小王码农记13 分钟前
vue中动态绑定ref后,获取某个具体组件实例
前端·javascript·vue.js
q5673152332 分钟前
使用libcurl编写爬虫程序指南
开发语言·c++·爬虫
拓端研究室TRL40 分钟前
Python贝叶斯回归、强化学习分析医疗健康数据拟合截断删失数据与参数估计3实例
开发语言·人工智能·python·数据挖掘·回归
悲且狂41 分钟前
vue辅助工具(vue系列二)
前端·javascript·vue.js
しかし1181141 小时前
C语言队列的实现
c语言·开发语言·数据结构·数据库·经验分享·链表
牧码岛1 小时前
Web前端之Vue+Element实现表格动态不同列合并多行、localeCompare、forEach、table、push、sort、Map
前端·javascript·elementui·vue·web·web前端
zhangpeng4555479401 小时前
用Java写一个MVCC例子
java·开发语言
老K(郭云开)1 小时前
如何让eDrawings html文件在Chrome浏览器上展示——allWebPlugin中间件扩展
前端·javascript·chrome·中间件·edge·html
point_zg1 小时前
Vue报错...properly without JavaScript enabled. Please enable it to continue
开发语言·javascript·vue