问题总结:var、let、const的区别(扩展名:变量提升,函数提升)let和const是ES6中新增的声明变量的命令;let和const只在块级作用域中生效,var声明变量是全局的;var有变量提升,let和const没有变量提升;romisvar可以重复声明,let和const不能在同一个作用域内重复声明;let和const的区别:const不能改变,存放在栈区的基本数据类型和引用数据类型的指针声明后不能改变。有一个临时死区。for、forEach、for...in、for...of循环的区别是一样的:都可以遍历数组;difference:for:缺点:不能直接遍历对象。forEach():缺点:不能直接遍历对象,不能跳出循环。for...in:优点:可以直接遍历对象,循环原型链中的所有对象。缺点:消耗性能;保存键名,返回序号0123for...of【最优】:可遍历array、object、string、map、set等,可以跳出循环;保存key值,返回arr1arr2arr3缺点:不适合处理原生原生对象。解决for,forEach,for...of不能直接遍历对象的问题:将对象转为数组;参考:https://www.cnblogs.com/goule/p/13630915.htmlES5和ES6的区别:ECMAScript是JS相比ES5,ES6在向后兼容的基础上提供了大量的新特性,比如:块级作用域关键字let、常量const、箭头函数promisethis指向问题类Class对象字面量属性赋值缩写、字符串模板、Iterators(迭代器)、Modules、Proxies、Map+Set+WeakMap+WeakSet四种集合类型,ES6文档:https://es6.ruanyifeng.com/#docs/letES版本更新:https://www.jianshu.com/p/824f255c2dd8数据类型检测typeof:检测基本数据类型,返回结果为字符串typeofstring*缺点:不能细分对象,不能区分数组和对象*原理:内存中存储的值是以二进制方式存储的instanceof:检测是否是类的实例arrinstanceofArrayconstructor:检测构造函数arr。constructor===ArrayObject.prototype.toString.call:检测数据类型是否为数组、对象、函数Object.prototype.toString.call(obj)Array.isArray:如何检测数组Array.isArray(arr)区分是数组还是对象Array.isArray():ES6语法构造函数:Object.prototype.toString.call():toString()ofObject.prototype:基于Object.prototype。isPrototypeOf()是基于getPrototypeOf()https://www.cnblogs.com/woniubushinide/p/11231646.htmlaxiosajaxfetchaxios的区别是对ajax的一种封装,fetch是浏览器原生实现的请求方法,而ajax点对点ajax:是对原生XHR的封装,加入添加了对JSONP的支持*varajax=newxmlHttpRequest*ajax.readystatus===2fetch:ES6版本的ajax,基于标准的Promise实现,支持async/awaitAxios:基于原生XHR,对Promise进行封装,用于浏览器和HTTP客户端node.js的;axios:支持http拦截器创建对象方法通过字面量创建通过对象创建使用工厂模式创建对象使用构造函数模式创建对象使用原型模式创建对象https://m.html。cn/qa/javascript/11183.html变量提升的问题变量提升:withvar,function提升:(旧版本IE10及以下)withfunction,会提前声明和定义(新版本)block-levelscope会提前声明,未定义函数声明优先提倡https://blog.csdn.net/qq_35895679/article/details/105904369OOP仅在90年代流行。它强调对象的“抽象”、“封装”、“继承”和“多态”。我们说编程是由“数据结构”+“算法”组成的。从宏观上看,OOP下的对象是以编程为中心、面向程序的对象。三大特性:封装继承多态性*封装:是指可以将一个实体的信息、功能、响应打包到一个对象中的特性。*继承:优点:继承的方式可以在不改变原有程序的情况下,对原有程序进行扩展,既可以保留原有的功能,又可以扩展新的功能。这有助于减少重复编码,提高软件开发效率。生成对象的基本方式有两种:*一种是根据原型(prototype)对象生成新的对象。*一种是根据类生成新的对象。类(class):*1)私有成员(private):默认情况下,一个类中的所有成员都是私有的。私有成员只能被类本身的成员函数访问。可以被继承但不能使用被继承的私有成员。*2)公共成员(public):公共成员可以被类成员函数和外部函数使用。*3)受保护成员(protected):类的受保护成员可以被该类及其派生类的成员函数和友元函数使用,具有继承性。类(Class)用来描述具有相同属性和方法的对象的集合。它定义集合中每个对象共有的属性和方法。对象是类的实例。https://www.jianshu.com/p/b2dcf206cf87ES5如何继承原型链继承借用构造函数继承组合继承原型继承寄生继承组合寄生继承https://www.jianshu.com/p/c6f36b3a5408ES6类Class)通过class关键字,可以定义一个类。ES6类可以看作是另一种编写构造函数的方式。类的数据类型是函数,类本身指向构造函数。该类必须用new调用,否则会报错。这是它与普通构造函数的主要区别之一,普通构造函数不用new就可以执行。类中定义的所有方法都是不可枚举的。https://es6.ruanyifeng.com/#docs/classscope,closure,prototypechain先说一下scope的三个概念:ES5全局作用域,函数作用域,ES6块级作用域closure:指的是一个函数可以访问另一个函数范围内的变量。Prototypechain:Constructor,prototypeprototype,构造函数组成原型链有什么用原型链继承如何实现ES5:User.call(this,)把this改点。ES6:classextends10.23-ES6~ES11你在项目中什么地方使用闭包?为什么要使用闭包?闭包原则是什么?es6项目中es6特性有哪些有用(他主要是想让你讲箭头函数和promises,毫无疑问他也准备了与此相关的问题)箭头函数,promiselets,const,classextendsmodularization下面说说es5和es6的要点箭头函数中的this是es5this指向执行的上下文,apply、call、bind可以改变this的指向。ES6箭头函数:this总是指向函数声明范围内的this的值。有什么方法可以改变thisapply,call,bind可以改变这一点。使用ES6箭头函数。如何使用承诺?它解决了什么问题?Promise是一种异步编程的解决方案,比传统的异步方案【回调函数】和【事件】更加合理和强大。promise.thenPromise.all如何中断承诺?(可以返回一个空的promise,既不是resolve也不是reject)CommonJS输出一组变量exportsrequire[objectObject]调用Object.prototype的toString()方法,返回数据类型为Object;关于这个:关于这个:https://zhuanlan.zhihu.com/p/23804247this指向普通函数,this是调用的地方,箭头函数的this是声明的地方callapplybind,把this改成指向call,apply,bind这三个方法其实都是继承自Function.prototype中的,属于实例方法;call、apply、bind的作用是在函数运行时改变this的方向;call()可以依次传递对象后的实参,apply()需要将实参封装成一个数组,统一传递bind返回对应的函数,方便后面调用;apply和call会立即被调用。在ES6的箭头函数下,call和apply会失效。this,superObject.setPrototypeOf指定一个对象的原型:Object.setPrototypeOf(obj,prototype)this,global,globalThis在浏览器中,可以在程序的顶层使用this关键字来引用Node中的全局对象.js,可以使用global关键字来访问全局对象globalThis旨在通过定义一个标准的全局属性来整合越来越分散的访问全局对象的方法
