🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 数据类型 [**基本类型有哪些?**]() ``` 基本数据类型 Number 、String、Boolean、BigInt、Symbol、Undefined、Null 引用类型 Object(Function ,Array,Date,Math,) ``` * [ ] 判断类型的方法有哪些?之间的区别是什么? ~~~jsx let bool = true; let num = 1; let str = 'abc'; let und= undefined; let nul = null; let big = BigInt(1) let arr = [1,2,3,4]; let obj = {name:'xiaoming',age:22}; let fun = function(){console.log('hello')}; let s1 = Symbol(); ~~~ 1. typeof 可以判断基本类型(除Null), ~~~jsx typeof num // 'number' typeof str // 'string' typeof bool // 'boolean' typeof und// 'undefined' typeof big // 'bigint' typeof s1 // 'Symbol' ~~~ 2. instanceof 可以判断引用类型 3. Object.prototype.toString.call() ## 数组 [**数组有哪些方法**]() ~~~jsx pop/some/find/push/unshift/shift/ ~~~ [**哪些方法可以改变原数组**]() ~~~jsx 1. pop // 从最后一项移除 并返回移除的项目 2. push // 从数组后面添加一项,返回新的数组长度 3. shift // 从数组的最前面删除一项,并返回该项 4. unshift // 从数组的最前面添加一项,并返回新的数组长度 5. reverse // 反转数组 6. sort // 对数组进行排序 7. splice //三个参数。第一个代表开始的下标,第二个代表 要删除的个数,第三个代表要替换的东西       返回被删除的数组 ~~~ [**for in , forof 有什么区别**]() * for in 遍历的数组的索引(即key 值) for in会遍历数组的所有可枚举属性,包括原型。所以更适合遍历对象 * for of 遍历数组的元素值 for of 不会遍历枚举属性 [**forEach()、map()、reduce()、filter()的区别**]() * 都不会改变原数组 * forEach 循环数组中每一个元素并采取操作,不返回新数组,不支持continue、break关键字, * map 返回值是每一次执行的结果组成的新数组 * filter 过滤组成员 并返回新数组 * reduce 处理组成员 并返回一个值 [**数组去重有哪些方式**]() * Array.from(New Set()) * 其他的可以利用数组的一些方法 和ES6的Map [**数组和类数组的区别**]() * 类数组 具有.length 属性 但是不具有数组的方法 * 类数不能使用数组的方法 [**类数组怎么转成数组**]() ~~~jsx [].prototype.slice.call() Array.from ~~~ ## 闭包 [**什么是闭包?**]() 能调用另一个函数内的变量 [**闭包是如何产生的?**]() 外层函数调用后,外层函数的作用域对象无法释放 [**用闭包有优缺点**]() * .优点 ` 减少了全局变量可以在内存中一直维持一个变量` * 缺点 `由于得不到释放,消耗内存 使用不当会造成内存溢出` ## THIS [**创建对象的方式有哪些**]() * new Object() * Object.create() * 字面量写法 [**new Object() 和Object.create()有什么区别**]() [**简述一下什么是this**]() this是个对象 在不同情况下this的指向不同 ~~~jsx 1. 对象调用时this指向该对象 2. 直接调用的函数 this 指向window 3. 通过new 的方式 this 永远指向新创建的对象 ~~~ [**call、apply、bind、有什么区别**]() * 都可以改变this * call/apply 都会立即执行 bind 返回改变this 后的函数 * call 第二个参数接受参数列表 apply 第二个参数接受一个数组 ## 原型 原型链 [**什么是原型、原型链**]() * 原型 1. 原型包括隐式原型(__prot0__) 和显示原型(prototype) 2. 所有的函数都有prototype(显示原型)属性,属性值是一个普通对象指向函数的原型对象 3. 引用类型都有一个__proto__(隐式原型)属性,指向构造函数的prototype * 原型链 **原型链的链接是靠隐式原型链接的** `当访问一个对象属性时,会先在对象本身查找,如果没有找到就会去对象的__proto__(隐式原型)查找,即构造函数的prototype ,如果还没有查找到,回去构造函数的prototype的__proto__查找。这样一层层向上查找的链式结构,叫做原型链` [**继承 有哪些方法,他们直接的区别是什么**]() ## 深浅拷贝 [**什么是深浅拷贝**]() * 浅拷贝 指向同一内存地址是共同使用一块内存 * 深拷贝 会新开辟一块内存空间 然后指向该内存空间 [**js中那些是深拷贝 那些是浅拷贝**]() * 浅拷贝 ... assign ## 其他 [**JavaScript有哪些内置对象**]() `Math Object Array Date RegExp JSON Promise parseInt等。。。` [**JavaScript脚本延迟加载的方式有哪些?**]() * 动态添加script 标签 * defer 属性 * async 属性 * setTimeoute * 让js 最后加载 [**defer 和async 有什么区别和优缺点?**]() * defer 脚本会被延迟到整个页面都解析完毕之后再执 * async 加载完脚本后立即执行 缺点是 不能控制加载的顺序 [**ajax、axios、fetch的区别?**]() * Ajax ~~~jsx 1. 属 js 原生 2. 容易产生回调地狱 ~~~ * Axios ~~~jsx 1. 解决回调地狱问题 2. 支持Promise技术 3. 有超时处理 4. 有拦截器,可以对请求和响应统一处理 5. 浏览器兼容性良好 ~~~ * Fetch ~~~jsx 1. 属 js 原生 2. 基于 Promise 对象设计的,可以解决回调地狱问题 3. 默认不带cookie,使用时需要设置 4. 没有办法检测请求的 进度,无法取消或超时处理 ~~~ [**什么是防抖、节流?**]() 1. 防抖 ~~~jsx 1. 什么是防抖? 在事件被触发n秒后再执行回调函数,如果在这n秒内又被触发,则重新计时 2. 应用场景 输入框连续输入、resize、scroll事件 3. 原理 维护一个定时器,规定在delay时间后触发函数,但是在delay 时间内再次触发的话 会清空当前timer,然后重新计时 ~~~ 2. 节流 ~~~jsx 1. 什么是节流? 单位时间内,只能有一次触发事件的回调函数能执行。单位事件内触发多次,只有一次生效 2. 应用场景 鼠标连续点击、 3. 原理 判断是否到达一定时间来触发函数, ~~~