js笔记

101 阅读2分钟

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变量对象用来存储变量

闭包

保护私有变量  
保存