目录
1、说一说常见的数据类型?
基本数据类型:String、Number、Boolean、Undefined、Null、Symbol、BigInt
引用数据类型:object(array、function、date、math、Reg)
2、var、const和let区别?
var声明的变量为全局作用域、而let声明的变量为块级作用域、const声明的常量为块级作用域。var声明的变量存在变量提升,而const和let不存在变量的提升。var可以重复声明同一个变量、let和const不能声明同一个变量,const声明的值不能修改,但是如果const声明的是一个对象,对象里面的属性和值可以修改.
3、ES6新增的特性
let、const,箭头函数、模板字符串、解构赋值、扩展运算符、set、map、promise对象。
4、如何判断JS数据类型?
typeOf:返回判断数据的类型。对于简单数据类型,除了null返回object,其他都可以正确判断。对于引用数据类型,除了function外都会返回object。
instanceof:判断对象的原型链__proto__上是否存在构造函数的原型prototype,只能判断引用数据类型,不能判断基本数据类型,常用来判断a是否为b的实例。
object.prototype.toString.call():返回类型为[object 数据类型]
5、讲一下闭包?
函数嵌套函数,内部函数就是闭包。内部函数可以访问外部函数中的变量,内部函数没有执行完毕,外部函数中的变量不会被销毁。作用:封装一段代码,避免全局变量污染问题。
6、什么是事件代理?
事件代理也叫事件委托。就是把原本绑在子元素上的点击事件绑定在父元素身上,通过事件冒泡原理父元素可以监听到子元素上的点击事件,触发相应的操作。举例:ul中li标签的事件监听,把原本绑定在li上边的监听事件绑定在ul上,这样的好处是可以实现动态元素的绑定。
7、事件循环?
由于js为单线程,当遇到同步任务和异步任务时,一般把同步任务放在运行栈中,当遇到异步任务的时候会把异步任务放到任务队列中,直到同步任务执行完毕之后再执行异步任务,由于一次只能处理一个异步任务,所以处理完一个异步任务后又会在任务队列中查找下一个任务,以次循环往复直到执行完最后一个任务就称为事件循环。
8、什么是宏任务和微任务?
宏任务:计时器、ajax、dom事件
微任务:promise.then、process.nextTick
9、JS运行机制,代码执行机制?
JS为单线程,一个任务执行完毕才能执行下一个任务。执行顺序为同步程序执行完成后,执行异步程序
(1)同步任务(2)微任务(3)宏任务
10、数组常见的方法:
增:push(末尾)、unshift(开头)、concat(连接两个数组)
删:pop(末尾)、shift(开头)splice(第一个参数为开始位置、第二个参数为删除数量)、slice
查:indexOf()返回要查找元素在数组中的位置,没找到返回-1、in