JS中的数据类型及堆栈内存
1.基本数据类型(值类型):string ,number, boolean,null,undefine
2.引用数据类型:object function
3.es6新增:Symbol唯一值
typeof检测数据类型
console.log(typeof NaN) => number 不是一个数字但是是数字类型not a number
NaN==NaN也是不相等的,他和谁都不想等,所以检测是否为有效数组需要用isNaN
Object对象的属性名一定不能为引用类型,默认会把引用类型的值转换成字符串进行处理(执行toString)
let obj = {
name: 'zs'
}
let x = {
num: 200
}
let y = {
num:300
}
obj[x] = 'chenm'
obj[y] = 'chenm'
console.log(obj[x]===obj[y]) // true
console.log(obj) //{name: 'zs',[object Object]: 'chenm'}
数组常用的方法
- concat
- copyWithin
- ntries
- every
- fill
- filter
- find
- findIndex
- flat
- flatMap
- forEach
- includes
- indexOf
- join
- keys
- lastIndexOf
- map
- pop
- push
- reduce
- reverse
- shift
- slice
- some
- sort
- splice
- toLocaleString
- toString
- unshift
- values
- from
- isArray
浏览器底层渲染机制
- 编译器(把代码解析成浏览器能看得懂的结构)
词法解析
AST抽象语法树
构建出浏览器能够执行的代码 - 引擎(V8/webkit内核)
变量提示
作用域/必报
变量对象
堆栈内存
堆栈内存
js引擎想要执行代码,一定会创建一个执行环境栈
EC执行上下文,某个域下的代码执行都有自己都执行上下文 全局EC(G)函数EC(...)
把创建都上下文压缩到栈中执行=>进栈
执行完有的上下文就没有用了=>出栈
有的还有用,会把其压缩到栈底=>闭包
- 全局对象GO:global object 在浏览器端(不是node)会把全局对象赋值给window
变量赋值(三步) 1. 创建变量 声明 2. 创建值 基本数据类型值在栈中创建 引用数据类型值在堆内存中开辟一个空间创建 3. 让变量和值关联起来(赋值)定义defined
作用域
创建函数都时候
创建一个堆(存储代码字符串和对于的键值对)
初始化了当前函数的作用域
函数执行的时候
创建一个新的执行上下文EC(压缩到栈ECStack里执行)
初始化this执行
初始化作用域链[[scope chain]]
创建AO变量对象用来存储变量
闭包
保护私有变量
保存