1.js的数据类型以及存储上的差别?
基本类型:
Number
String
Boolean
Undefined
null
symbol
引用类型
Object
Array
Function
其他类型
Date RegExp Map Set
总结:
声明变量时不同的内存地址分配:
简单类型的值存放在栈中,在栈中存放的是对应的值
引用类型对应的值存储在堆中,在栈中存放的是指向堆内存的地址
不同的类型数据导致赋值变量时的不同:
简单类型赋值,是生成相同的值,两个对象对应不同的地址
复杂类型赋值,是将保存对象的内存地址赋值给另一个变量
2.说说你了解的js数据结构?
数组
栈:
遵循后进先出原则的有序集合
队列:
遵循先进先出原则的一组有序的项
链表
字典:
以键值对存储数据的数据结构
散列表:
哈希表,散列表插入删除和取用数据很快
树
图
堆
3.DOM常见的操作有哪些?
创建节点
查询节点
更新节点
添加节点
删除节点
4.BOM的理解?常见的BOM对象你了解哪些?
BOM是浏览器对象模型,提供独立于内容与浏览器窗口进行交互的对象,核心对象是window
loaction
navigator
history
5. == 和 === 区别?
在java Script中存在隐式转换,==在比较中会先进行类型转换再确定操作数是否相等, ===类型相同值也相同
6.typeof 与 instanceof区别?
typeof 会返回一个变量的基本类型, instanceof 返回的是一个布尔值
instanceof 可以准确地判断复杂引用数据类型,但是不能正确判断基础数据类型,type可以判断基础数据类型
7.js原型,原型链?
原型作用是让实例可以共享某些数据
原型链是指一个对象继承其他队相中的属性和方法
8.说说对作用域链的理解?
作用域即变量和函数能被访问的区域。
作用域分成
1️⃣全局作用域:声明的变量可以在程序的任意位置访问
2️⃣函数作用域:也就是局部作用域,只能在函数内部访问
3️⃣块级作用域:let和const变量声明在块级作用域,大括号外不能访问这些变量
9.js中关于this指向的问题
1.全局对象中的this指向指向的是window
2.全局作用域或者普通函数中的this指向全局window
3.this永远指向最后调用它的那个对象在不是箭头函数的情况下
4.new 关键词改变了this的指向
5.apply,call,bind可以改变this指向
6.箭头函数中的this它的指向在定义的时候就已经确定了箭头函数它没有this,看外层是否有函数,有就是外层函数的this,没有就是window
7.匿名函数中的this永远指向了window,匿名函数的执行环境具有全局性,因此this指向window
10.说说new操作符具体干了什么?
new操作符用于创建构造函数的实例对象。
工作流程:
创建一个新的对象obj
将对象与构建函数通过原型链连接起来
将构建函数中的this 绑定到新建的对象 obj上
根据构建函数返回类型作判断,如果是原始值则被忽略,如果是返回对象,需要正常处理
11.bind、call、apply区别?
bind、call、apply作用是改变函数执行时的上下文,改变函数运行时this指向。
区别:
三者都可以改变函数的this 对象指向
三者第一个参数如果为空默认指向window
三者都可以传参,但是 apply 是数组,而 call 是参数列表,且 apply 和call 是一次性传入参数,而bind 可以分为多次传入
bind 是返回绑定this之后的函数,apply 、call 则是立即执行
12.js中执行上下文和执行栈是什么?
执行上下文分为:
1️⃣全局执行上下文:只有一个,浏览器中的全局对象就是 window 对象,this 指向这个全局对象
2️⃣函数执行上下文:存在无数个,只有在函数被调用的时候才会被创建,每次调用函数都会创建一个新的执行上下文
3️⃣Eval 函数执行上下文: 指的是运行在 eval 函数中的代码
执行上下文周期:
1️⃣创建阶段
2️⃣执行阶段
3️⃣回收阶段
执行栈:
具有后进先出结构,用于存储在代码执行期间创建的所有执行上下文,当js引擎开始执行第一行脚本代码时就会创建一个全局执行上下文然后将它压到执行栈中,每当引擎碰到一个函数的时候,它就会创建一个函数执行上下文,然后将这个执行上下文压到执行栈中,当该函数执行结束后,对应的执行上下文就会被弹出,然后控制流程到达执行栈的下一个执行上下文
13.说说js中的事件模型?
事件模型分为三种:
原始事件模型:事件绑定监听函数
标准事件模型:有三个过程事件捕获阶段,事件处理阶段,事件冒泡阶段
IE事件模型:有两个过程事件里处阶段,事件冒泡阶段
14.什么是事件代理?应用场景?
元素响应事件的函数委托到另一个元素,事件流有三个阶段捕获阶段,目标阶段,冒泡阶段,事件委托在冒泡阶段
事件有:click mousedown mouseup keydown keyup