1. NaN + [ ] 为什么转化为 字符换 “ NaN ”:
空数组在隐式转换的时候,会先转换为字符串 ( [ ] -> ‘ ’ ),再转换为数字,但是在转换为数字的过程中遇见 + 加号,所以就变成字符串拼接了。
2. 10 + undefined -> 数字: NaN:
undefined 转换为数字是NaN ,10 + NaN 是NaN;NaN 加任何数都是 NaN
3. 对象转字符串,先调用 valueof,再调用 toString
4. 任何数据类型都可以转换为字符串,对象在转换为字符串的之前需要先判断类型
堆栈内存(VO,GO):
. 栈内存:提供代码的执行环境,堆内存:存放全局的属性和方法
内容: 堆(heap)栈(Stack)内存,执行环境栈(ECStack),执行上下文(EC),GO,VO,AO
1. 理解:
JS 之所以能够在浏览器中运行,是因为浏览器给 JS 提供了执行的环境 -> 栈内存
栈内存: Execution Context Stack,Context:上下文,也是环境,叫做执行环境栈,
就是浏览器会在计算机内存中分配一块内存,专门用来供代码执行的栈内存
2. 每打开一个网页都会开辟一块内存,都会形成一个全新的执行环境栈
全局对象(GO):
3. 浏览器会提供很多供我们调用的属性和方法(isNaN,parseInt),会放在一个位置叫全局对象
4. 全局对象 GO (Global Object):浏览器把内置的一些属性和方法放到一个单独的内存中,这个内存就叫做,堆内存(heap)
5. 任何内存都有内存地址,内存地址都是16进制的
6. 在浏览器端,会让 window 指向 GO,所以浏览器端的 window 指向的就是全局对象
7. 在 node 中指向的是 global
8. 栈内存:提供代码的执行环境,堆内存:存放全局的属性和方法
作用域:
1. 每一块代码都有自己执行所在的环境(函数里面的代码执行的时候也有一块自己的执行环境)
执行上下文:(EC)(Execution Context)
1. 执行上下文:每一个区域中的代码,自己所处的执行环境;就是代码自己执行所在的环境
2. 跟作用域有些相似
3. 全局执行上下文 EC(G)
4. 函数中的代码都会在一个单独的私有的执行上下文中处理
5. ES6 可能会形成 块级执行上下文
形成的 执行上下文,会进入到栈内存中执行,叫做进栈:
执行完代码,肯能会把形成的上下文出栈释放,全局的不会出栈
变量对象 VO (Variable Object):
1. VO : 在当前的上下文中,用来存放创建变量和值的地方
2. 每一个执行上下文中都会有一个自己的变量对象,函数的私有上下文叫做AO
3. VO(G)全局变量对象,存放全局对象
AO 也是变量对象,只不过他叫活动变量对象(Activation Object):
1. VO 的一个分支而已
赋值的步骤:
1. 创建一个值
- 基本数据类型的值,都是直接存在栈内存中的
- 引用数据类型的值,是先开辟一个堆内存,把东西存储进去,最后把地址放在栈中供变量关联使用
2. 创建一个变量
3. 让变量和值关联在一起
4. 所有的指针赋值,都是关联指向
引用数据类型:
题: