数据类型
基本数据类型:number、string、boolean、null、undefined
引用数据类型:object、array、function
null与undefined的区别
null表示一个空值或者不存在的对象
undefined表示一个变量被声明了但没有被赋值,访问没初始化的变量或者对象中不存在的属性
null==undefined true null===undefined false
如何判断js的数据类型
typeof 注意:[ ]、{ }、null返回都是object
Object.prototype.toString.call() 最准确返回值"[object Number]"
Array.isArray()
instanceOf
数组常用的方法
.length 获取长度
.push 末尾添加
.unshift 开头添加
.pop 末尾删除
.shift 开头删除
.concat 数组合并 返回新数组
.slice 截取数组,返回新数组
.splice 删除或添加指定索引的元素
.sort 数组排序
.join 数组转换成字符串
.reverse 翻转数组
.tostring 数组转换为字符串,用,分隔
forEach 遍历数组
map 便利操作数组返回新数组
filter 过滤数组返回新数组
find 找出符合条件元素
findIndex 找出符合条件的索引
reduce 数组累加求和
==与===的区别
== 等于 两边值相等就相等返回true
===绝对等于 两边必须值和类型都相等的同时才返回true
如何区别是数组还是对象
Array.isArray()、[] instanceof Array 、obejct.prototype.toString.call([]) ['object Array']
多为数组转换一维数组
arr.flat(infinity) infinity深度
如何判断两个对象是否相等
Object.is(obje1,obj2)
类型强制转换和隐式转换
强转换:Number()、toString() 隐式转换:数学运算符
什么是类数组、如何将其转换为真是数组
类数组的特点 类数组又称对象数组
1、具有length属性
2、按索引方式存储数据
3、不具有数组的push、pop等方法
通过array.from将其转换为真实数组
如何遍历对象的所有属性
object.keys()
作用域和作用域链的区别
作用域即变量和函数所生效的范围,作用域又分为全局作用据和函数作用域
全局作用域下的变量和函数可随意被调用和赋值,容易造成全局污染
函数作用域下的变量的和函数,只能在当前作用域下访问和使用不会造成全局污染
什么是作用域链
就是当访问一个变量或函数的时候,会现在当前作用域去查找,当前作用域没有就会去上一层作用域去查找,一直查找到全局作用域,这个查找的过程就叫做作用域链
解释一下什么是回调函数
把一个函数作为参数传给另一个函数,等那个函数完成任务后再调用你传进去的函数
常见的回调函数 setTimeout、setInterval promise 数组方法forEach 事件监听
解释下什么是闭包
什么是内存泄漏,哪些方法会导致内存泄漏
内存泄漏:是指不再使用的内存没有被释放
未清除的setInterval
、setTimeout
,未清除的事件监听 闭包等
原型与原型链
在对象中每个对象都会有一个prototype内部属性,这个属性就是所谓对象的原型,通过原型可以继承和访问其他对象的属性和方法
原型链就是当我们访问一个对象的属性的时候会现在对象中去查找,如果对象中没有就回去对象的原型上去查找知道查早到或查找为null这个过程就叫做原型链
js的继承方法
原型链继承、构造函数继承 、组合继承、class类继承
this指向问题
默认情况下this只想window
箭头函数中没有自己的this指向他只想最近又this的父级
普通函数中谁调用函数this就指向谁
构造函数中指向构造函数的实例化对象
for in与for of 的区别
forin既可以遍历数组也可以遍历对象,forof只能用来遍历可迭代对象数组字符串set、map
call、apply、bind的区别
都是用于改变this指向的,区别在于传参方式与执行机制的不同
call是以若干个参数的方式进行传递参数,立即执行
apply是以数组的方式进行传递参数,立即执行
bind的传参方式与call相同但执行机制不同,需要再次手动调用
事件循环机制-宏任务与微任务的区别
js的执行机制,因为js是单线程语言,代码执行的顺序是按照从上到下的顺序去执行的,当代码执行的时候会先执行主线程的代码,当遇到异步任务的时候,会先将异步任务添加到任务队列当中,当主线程任务执行完毕后在执行异步队列上的任务,任务队列又分为红任务和微任务,常见的宏任务又settimeout、setinterval,常见的微任务有promise的回调
js防抖和节流
防抖
节流
new操作符都做了写什么
js数组去重
js深拷贝与浅拷贝的区别
js的垃圾回收机制
普通函数与构造函数的区别
堆与栈的区别
ajax、axios、fetch的区别
同源策略
为什么会出现跨域,如何解决
get与post的区别
http与https的区别
cookie、sessionstorage、localstroage的区别
一个页面从输入url到页面加载完成这个过程都发生了什么
websocket
强缓存与协商缓存的区别---http缓存
es6有哪些新增的方法
var、let 、const的区别
amd、cmd commonJ、requirejs的区别
箭头函数与普通函数的区别
set、map的区别
settimeout、promise、async/await的区别
讲一下promise
promise.all()
手写一个promise
如果promise先执行resolve在执行reject返回的是什么
同步和异步的区别
webpack
loader与plugin的区别
Vue 该如何实现组件缓存
keep-alive
Vue 常用的指令都有哪些
vue的自定义指令
v-show与v-if的区别
为什么v-if 和 v-for不能同时使用
数据请求在created和mounted的区别
为什么data属性是一个函数而不是一个对象
vue中key的与哪里
promise写一个最大的并发
手写todolist
vue的数据双向绑定原理
flex 11auto都代表什么
一次发任意多个请求,如果有失败,则重发,知道所有的都成功,护着超出最大重试次数才返回最终结果