**
该篇文章是个人看视频之后总结的;
**
-
1.首先看几道题:
百度面试题:
let a = 12;
let b =a;
b = 13;
console.log(a);//12let a = {n:12};
let b = a;
b[“n”] = 13;
console.log(a.n);//13let 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中比较规则
对象对象 比较地址
对象字符串 对象变为字符串
NaNNaN 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;
栈内存释放: 函数执行完,形成的执行上下文中(执行环境),没有东西被上下文(环境)意外的东西占用,此上下文就会从执行环境栈中移除(释放);如果有占用,则压缩到栈的地步(没有释放 => 闭包)