• 重温 JavaScript 系列(3):Set、Map、内存泄露情况、json和xml数据、delete能删除什么、defer和async区别


    介绍下 Set、Map、WeakSet 和 WeakMap 的区别?

    Set

    1. 成员不能重复;
    2. 只有键值,没有键名,有点类似数组;
    3. 可以遍历,方法有 add、delete、has

    WeakSet

    1. 成员都是对象(引用);
    2. 成员都是弱引用,随时可以消失(不计入垃圾回收机制)。可以用来保存 DOM 节点,不容易造成内存泄露;
    3. 不能遍历,方法有 add、delete、has

    Map

    1. 本质上是键值对的集合,类似集合;
    2. 可以遍历,方法很多,可以跟各种数据格式转换;

    WeakMap

    1. 只接收对象为键名(null 除外),不接受其他类型的值作为键名;
    2. 键名指向的对象,不计入垃圾回收机制;
    3. 不能遍历,方法同 get、set、has、delete

    js 中有哪几种内存泄露的情况

    1. 意外的全局变量;
    2. 闭包;
    3. 未被清空的定时器;
    4. 未被销毁的事件监听;
    5. DOM 引用;

    json和xml数据的区别

    参考答案

    1. 数据体积方面:xml是重量级的,json是轻量级的,传递的速度更快些。
    2. 数据传输方面:xml在传输过程中比较占带宽,json占带宽少,易于压缩。
    3. 数据交互方面:json与javascript的交互更加方便,更容易解析处理,更好的进行数据交互
    4. 数据描述方面:json对数据的描述性比xml较差
    5. xml和json都用在项目交互下,xml多用于做配置文件,json用于数据交互。

    最小值和最大值:

    1. console.log(Math.min()) // Infinity
    2. console.log(Math.max()) // -Infinity
    3. console.log(Infinity > -Infinity) // true
    • Math.min 的参数是 0 个或者多个,如果多个参数很容易理解,返回参数中最小的。如果没有参数,则返回 Infinity,无穷大。
    • 而 Math.max 没有传递参数时返回的是-Infinity.所以输出 false

    delete能删除的:
    (1)可配置对象的属性(2)隐式声明的全局变量 (3)用户定义的属性 (4)在ECMAScript 6中,通过 const 或 let 声明指定的 "temporal dead zone" (TDZ) 对 delete 操作符也会起作用
    delete不能删除的:
    (2)显式声明的全局变量 (2)内置对象的内置属性 (3)一个对象从原型继承而来的属性

    1. // 非严格模式下:
    2. // 全局变量
    3. var showvar = 30; // 显式声明 删除不了
    4. delete showvar;
    5. console.log(showvar) // 30
    6. hidevar = 20; // 隐式声明 删除成功
    7. delete hidevar;
    8. //console.log(hidevar) // ReferenceError
    9. // 严格模式下 隐式声明全局变量会报错,且无法使用delete标识符

    delete删除数组元素:
    (1)当你删除一个数组元素时,数组的 length 属性并不会变小,数组元素变成undefined
    (2)当用 delete 操作符删除一个数组元素时,被删除的元素已经完全不属于该数组。
    (3)如果你想让一个数组元素的值变为 undefined 而不是删除它,可以使用 undefined 给其赋值而不是使用 delete 操作符。此时数组元素是在数组中的

    defer和async区别

    区别主要在于一个执行时间,defer会在文档解析完之后执行,并且多个defer会按照顺序执行,而async则是在js加载好之后就会执行,并且多个async,哪个加载好就执行哪个。

    async:有async的话,加载和渲染后续文档元素的过程将和 script.js 的加载与执行并行进行(异步)。但是多个js文件的加载顺序不会按照书写顺序进行。

    derer:有derer的话,加载后续文档元素的过程将和 script.js 的加载并行进行(异步),但是 script.js 的执行要在所有元素解析完成之后,DOMContentLoaded 事件触发之前完成,并且多个defer会按照顺序进行加载。

    (学习来源:牛客网)

  • 相关阅读:
    Python独具特色的语法规范点梳理
    JAVA开发(记一次504 gateway timeout错误排查过程)
    ERP系统开发需要多少钱?
    超简单的集成表达式树查询组件,Sy.ExpressionBuilder 使用说明
    【C语言基础】rand()和srand()的使用
    英语六级day-2
    请问一下出现这种错误怎么解决呢(标签-xml)
    一个完整的初学者指南Django-part1
    too many arguments to return
    vue路由 & nodeJS环境搭建
  • 原文地址:https://blog.csdn.net/weixin_70437515/article/details/125425264