js
es6 及其以后的所有被加到标准中的新特性罗列,想到多少说多少
- let const
- 箭头函数
- 模板字符串
- 增强对象
- Promise
- async await
- 解构赋值
- 展开运算符
- ......
声明变量的三个关键字是什么?var、const 和 let 的主要区别是什么?
- var、const 和 let
- let 是变量,const 是常量
- 用 let 和 const 声明的变量是块范围的;用 var 声明的变量是全局范围的或函数范围的。
- var 变量可以在其范围内更新和重新声明;让变量可以更新但不能重新声明;const 变量既不能更新也不能重新声明。
- var 可以提升到其作用域的顶部。其中 var 变量初始化为未定义,let 和 const 变量未初始化(临时死区,TDZ)。
- 虽然可以在不初始化的情况下声明 var 和 let,但必须在声明期间初始化 const。
==和===的区别
- ==两边的操作项会发生隐式类型转换再进行值比对
- ===两边的操作项会比对类型和值
js 中的小数计算会有什么问题
- 精度缺失问题
如何解决
- 转换为整数后再计算,然后除以 10 的(小数位数的)指数
&& 与 || 操作符的优先级
|| < &&
箭头函数的 this 指向?
- 指向父级作用域的 this 对象
- 箭头函数不会受到 call,apply,bind 的影响
如何修改一个函数中的 this 指向
- bind(obj),call(obj,a,b),apply(obj,[])
Vue2,3 中的响应式功能,依赖了 js 的什么特性
- Object.defineProperty(obj,'x',{get(){},set(){}})
- new Proxy(obj,{get(){},set(){}})
模块的导入导出用法
- export const a = 0; export default {}
- import { a }; import a
打包工具中的树摇是做什么用的
- 将代码中的死代码,无用代码,去掉,减少打包产物的体积
什么是浅拷贝和深拷贝
- 浅拷贝:引用拷贝
- 深拷贝: 值拷贝
节流和防抖
- 节流:一段时间执行一次。
- 防抖:最后一次才执行。有一个提交订单的按钮,由于用户快速,多次点击导致提交多个重复订单,如何解决?
什么是跨域
浏览器的同源策略,同源是指"协议+域名+端口"三者相同
解决方案
- 代理
- cors
- jsonp
jsonp 的原理
- 利用 script 跨域机制,将数据包裹再 js 函数调用中,传递给已经定义好的函数
什么是原型
构造函数的prototype
指向的一个对象,也叫原型对象
什么是原型链
- 原型对象也会指向自己的原型对象,一层一层向上指向形成的链路
如何创建一个没有原型的对象
- Object.create(null)
什么是闭包函数
- 能够外部作用域的函数,叫做闭包函数
动手来实现一下 new
function mynew(Func, ...args) {
// 1.创建一个新对象
const obj = {};
// 2.新对象原型指向构造函数原型对象
obj.__proto__ = Func.prototype;
// 3.将构建函数的this指向新对象
let result = Func.apply(obj, args);
// 4.根据返回值判断
return result instanceof Object ? result : obj;
}
闭包在项目中的应用场景
- 防抖
function debounce(fn, time) {
let timer = null;
return function () {
clearTimeout(timer);
setTimeout((...args) => {
fn.apply(this, args);
}, 300);
};
}
- 节流
function throttling(fn, time) {
let timer = null;
return function (...args) {
if (!timer) {
timer = setTimeout(() => {
fn.apply(this, args);
timer = null;
}, time);
}
};
}
- 内部成员变量
动手来实现一下 new
function mynew(Func, ...args) {
// 1.创建一个新对象
const obj = {};
// 2.新对象原型指向构造函数原型对象
obj.__proto__ = Func.prototype;
// 3.将构建函数的this指向新对象
let result = Func.apply(obj, args);
// 4.根据返回值判断
return result instanceof Object ? result : obj;
}
一个 Promise 实例有哪些状态?
- resolved
- pending
- rejected
Promise 中异常处理方式
- new Promise().catch()
- new Promise((reslove,reject)=>{},(err)=>{})
- async awiat,使用 try{}catch(e){}finally{}
catch
方法后的then
方法还会执行吗
- 会
如何进行异步编程,串行,并行
- promise
- async await
Promise值穿透
Promise.resolve(1)
.then(2)
.then(Promise.resolve(3))
.then(console.log)
Promise.resolve(1)会返回一个promise对象并且会将1当做then的参数。而.then 或者 .catch 的参数期望是函数,传入非函数则会发生值穿透。所以最后会输出:1。
题目
数组去重
- 原生方法:[...new Set([1,2,3,4,1])]
冒泡排序
- 从第一位开始与相邻元素进行比对,大数两方交换,一直对比到最后。
快速排序
- 选取一个中间数,将数组根据中间数分为两组,进行递归。