1.Object.is()和原来的比较运算符“==”和“===”有什么区别?两个等号的判断会在比较时进行类型转换;三个等号的判断(严格判断)比较时不会进行隐式类型转换(类型不同则返回false);Object.is()是在第三类数字判断等基础上,对NaN、-0和+0进行特殊处理,保证-0和+0不再相同,但是Object.is(NaN,NaN)将返回真。Object.is()应被视为具有特殊用途,不应被用作比其他相等比较更宽松或更严格的用途。2、VirtualDOM有什么优势?其实这个问题面试官更想听到的答案并不是说“直接操作/频繁操作DOM性能差”。如果DOM操作的性能这么差,那么jQuery就不会这么流行了。所以面试官其实是想听听VDOM想解决的问题,为什么频繁的DOM操作会导致性能不佳。首先我们要知道:DOM引擎和JS引擎是相互独立的,而是工作在同一个线程(主线程)中。调用DOMAPI的JS代码必须挂起JS引擎,转换传入的参数数据,激活DOM引擎,转换DOM重绘后可能的返回值,最后激活JS引擎继续执行。如果有频繁的DOMAPI调用,并且浏览器设备制造商不优化“批处理”,引擎之间切换的单位成本将快速累积。如果有DOMAPI调用强制重绘,重新计算布局和重绘图片会造成较大的性能消耗。二是VDOM与真实DOM的区别和优化:虚拟DOM不会立即进行排版和重绘操作。重绘,减少DOM节点过多的布局和重绘损失虚拟DOM可以有效减少大面积真实DOM的重绘和布局,因为它最终不同于真实DOM,只能渲染本地3.common.js和moduleses6引入的区别?Common.js是一个模块规范,最初应用于Nodejs,成为Nodejs的模块规范。运行在浏览器端的JavaScript也缺乏类似的规范。在ES6出来之前,前端也实现了一套相同的模块规范(例如:AMD)来管理前端模块。从ES6开始,引入了一套新的ES6Module规范,在语言标准层面实现模块功能,实现起来相当简单,有望成为浏览器和服务器通用的模块解决方案。但是目前浏览器对ES6Module的兼容不是很好。我们平时在Webpack中使用的export和import,都会通过Babel转换成CommonJs规范。使用上的主要区别是:CommonJs模块输出的是一个值的副本,而ES6模块输出的是值引用。CommonJS模块在运行时加载,ES6模块在编译时输出接口。CommonJs是单值导出,ES6Module可以导出多个CommonJs动态语法可以写在判断中,ES6Module静态语法只能写在顶层CommonJsthis是当前模块,ES6Modulethis是undefined4.useinJScode严格是什么意思?使用前和使用后有什么区别?usestrict是ECMAscript5加入的一种(严格的)运行模式,它使得Javascript在更严格的条件下运行。设置“严格模式”的目的主要是:剔除Javascript语法中一些不合理、不严谨的部分,减少一些怪异的行为;剔除代码运行中的一些不安全部分,保证代码运行的安全性;改进编译提高服务器效率,提高运行速度;为未来的Javascript新版本铺平道路。区别:禁止使用with语句。禁止this关键字指向全局对象。对象不能具有同名的属性。请用JS判断给定字符串是否同构。思路:可以用JS中的map函数判断字符串的值和索引代码:constisIsomorphic=(s,t)=>{if(s===t||s==='')returntrue让mapS=newMap(),mapT=newMap()for(leti=0;i
