javascript 数据类型转换 垃圾回收机制

**

该篇文章是个人看视频之后总结的;

**

  • 1.首先看几道题:

    百度面试题:
    let a = 12;
    let b =a;
    b = 13;
    console.log(a);//12

    let a = {n:12};
    let b = a;
    b[“n”] = 13;
    console.log(a.n);//13

    let a = {n:12};
    let b =a;
    console.log(b.n);//12
    b = {n:13};
    console.log(b.n);//13
    console.log(a.n);//12
    您能答出来吗?
    思路:
    1.首先打开浏览时,浏览器会开辟一个Ecstack(执行环境栈)栈内存(stack)
    2.接着产生一个EC(global) 全局执行上下文(全局执行环境)
    3.在全局执行环境中,声明一个 VO(global)环境变量 。

存储方式如下图:
第一个:
在这里插入图片描述
第二个:
在这里插入图片描述
第三个:
在这里插入图片描述

  • 2.数据类型转换

腾讯面试题:
let result=1+null+true+undefined+“tyt”+false+[]+undefined+null
console.log(result);// NaNtytfalse[]undefinednull
思路:没有遇到字符串就转为数字,
 1+ null转为0
 1+ true 转为1
 2 + undefined 结果为NaN
 遇到字符串 全按字符串操作来做

  • 3.数值比较

 JS中比较规则
 对象
对象 比较地址
 对象字符串 对象变为字符串
 NaN
NaN NaN和他自己以及其他值都不等
 null==undefined ==时为true === 为false 并且和其他任何值都不等
 剩下的只要两个类型不同,最后都转化为数字

对象.toString() 涉及Object.prototype.toString.call()
Object.is() 相对于==/===的比较有什么好处 =>深度比较 => 深度克隆
例子如下:
console.log([]==false); //true
console.log(![]==false); //true

  • 4.为什么typeof null 返回object?

 null 在存储时为000, 000被认为是对象类型
 整型
 100 字符串
 110 布尔类型

  • 5.内存回收机制

 标记清除法:谷歌
 引用清除法:IE (弊端,很多情况下,数字不是很准确,导致很多应该被清除的没有被清除, => 内存泄漏)
堆内存释放: 变量 = null;
栈内存释放: 函数执行完,形成的执行上下文中(执行环境),没有东西被上下文(环境)意外的东西占用,此上下文就会从执行环境栈中移除(释放);如果有占用,则压缩到栈的地步(没有释放 => 闭包)

发布了10 篇原创文章 · 获赞 25 · 访问量 2748

猜你喜欢

转载自blog.csdn.net/qq_44758322/article/details/105376929