一. Javascript中什么是基本数据类型,什么是引用数据类型?以及各个数据类型是如何存储的?
- 基本数据类型有
- Number
- String
- Boolean
- Undefined
- Symbol(es6新增数据类型)
- bigInt
- 引用数据类型统称为 Object 类型,细分的话有
- Object
- Arrary
- Date
- Function
- RegExp
- 基本数据类型的数据直接存储在栈中;而引用数据类型的数据存储在堆中,在栈中保存数据的引用地址,这个引用地址指向的是对应的数据,以便快速查找到堆内存中的对象
- 栈内存是自动分配的,而堆内存是动态分配的,不会自动释放,所以每次使用完对象的时候都要把它设置为 null, 从而减少无用内存的消耗
二. Javascript 中的垃圾回收机制?
按照固定的时间间隔,周期性地寻找那些不再使用的变量,然后将其清楚或释放内存。
1.标记清除:
原理:是当变量进入环境时,将这个变量标记为“进入环境”。当变量离开环境时,则将其标记为“离开环境”。标记“离开环境”的就回收内存。
垃圾回收器,在运行的时候会给存储在内存中的所有变量都加上标记。
去掉环境中的变量以及被环境中的变量引用的变量的标记。
再被加上标记的会被视为准备删除的变量。
垃圾回收器完成内存清除工作,销毁那些带标记的值并回收他们所占用的内存空间。
2.引用计数
原理:跟踪记录每个值被引用的次数。
声明了一个变量并将一个引用类型的值赋值给这个变量,这个引用类型值的引用次数就是1。
同一个值又被赋值给另一个变量,这个引用类型值的引用次数加1。
当包含这个引用类型值的变量又被赋值成另一个值了,那么这个引用类型值的引用次数减1。
当引用次数变成0时,说明没办法访问这个值了。
当垃圾收集器下一次运行时,它就会释放引用次数是0的值所占的内存。
三. JS性能优化的方式有哪些?
1.删除未使用的js代码:
1、未使用的功能性代码以及与之相关的代码
2、多余的依赖库
3、被滥用的npm包
4、公共模版代码
2.数组和对象操作避免使用构造函数
3.尽量避免使用非必要的全局变量
4.合理使用缓存机制(访问本地的数据很显然比远程数据要快快很多)
5.减少循环中的活动
6.减少不必要的变量
7.并不是代码量越少性能就越好
8.最小化语句数(JS代码中的语句数量也会影响所执行的操作的速度)
9.原生方法更快(最小的顺序组织逻辑,可以得到进一步的优化)
10.尽量避免使用闭包(常驻内存必然增加内存的使用量;使用不当很容易造成内存泄漏。)
四、 Spread Operator 展开运算符(...)
可以通过展开操作符(Spread operator)...
扩展一个数组对象和字符串。展开运算符(spread)是三个点(…),可以将可迭代对象转为用逗号分隔的参数序列。如同rest参数的逆运算。
五. AJAX 请求数据步骤是什么?传输的数据是用的 get 还是post?
AJAX请求的五个步骤
1.建立XMLHttpRequest对象;
2.设置回调函数;
3.配置请求信息,(如open,get方法),使用open方法与服务器建立链接;
4.向服务器发送数据;
5.在回调函数中针对不同的响应状态进行处理;
get请求是从指定的资源请求数据,get请求基本上用于从服务器获得(取回)数据。注释:GET 方法可能返回缓存数据。
post请求是向指定的资源提交要处理的数据,post请求也可用于从服务器获取数据。不过,post方法不会缓存数据,并且常用于连同请求一起发送数据。
如果调用是要检索服务器上的数据则使用GET。如果要检索的值会随时间和更新进程的改变而改变则要在GET调用中添加一个当前时间参数,这样后面的调用才不会使用先前的不正确的缓冲。如果调用是向服务器上发送任意数据,就可以使用POST。