来源:javapoint以前好评文章的分类,也整理了很多我的文档和教程资料。欢迎来到星和完美。面试时可参考考点复习。我希望我们能在一起。回馈各位读者,文末送5份《你不知道 的 JavaScript 上劵》下周一抽奖,祝大家好运!https://mp.weixin.qq.com/s/A5...1.let和const在JS中有什么用?在现代js中,let和const是创建变量的不同方式。在早期的js中,我们使用var关键字来创建变量。ES6版本引入了let&const关键字,目的是在js中创建两种不同类型的变量,一种是不可变的,一种是可变的。const:用于创建不可变变量。不可变变量是其值在程序的整个生命周期中都不会改变的变量。let:let用于创建一个可变变量,它是一个像var一样的普通变量,可以更改任意次。2、JS中的错误主要有哪些JS中的错误分为三种类型:加载错误:加载网页时出现的错误(如语法错误)称为加载错误,它是动态产生错误的。运行时错误:由于滥用HTML语言中的命令而导致的错误。逻辑错误:这些错误是在不同操作的函数上执行了错误的逻辑导致的3.如何通过类名获取dom元素在JS中使用document.getElementsByClassName()方法获取类名元素。4、什么是JS的作用域链及其作用?通常,变量的值取自创建该变量的函数的作用域。但是,如果在当前作用域中没有找到值,则会在上层作用域中检查,直到找到全局作用域。这样一个搜索过程形成的链称为作用域链。JS中的作用域链主要用来解析变量的值。如果没有这个,很多变量定义在不同的作用域中,JS很难为一个变量选择一个特定的值。5.解释JS中的MUL函数。MUL表示数字的简单乘法。在这种技术中,一个值作为参数传递给返回另一个函数的函数,第二个值传递给该函数,然后重复该过程。例如:x*y*z可以表示为functionmul(x){returnfunction(y){returnfunction(z){returnx*y*z;}}}6.用纯JS写程序实现字符反转字符串使用内置函数:内置函数reverse()直接对字符串进行反转。str="jQuery";str=str.split("")str=str.reverse()str=str.join("")alert(str);先把字符串拆分成一个数组,然后把这个数组倒过来,把最近的字符拼接成一个字符串。使用循环:首先,计算字符串中的字符数,然后对从最后一个字符开始的原始字符串应用递减循环,并打印每个字符,直到计数变为零。7.如何在JS中将一个页面重定向到另一个页面?使用location.href:window.location.href="https://www.onlineinterviewquestions.com/"使用location.replace:window.location.replace("https://www.onlineinterviewquestions.com/;");8.列举一些JS中的设计模式:设计模式是软件设计中常见问题的通用可重用解决方案,以下是一些设计模式:创建模式:该模式抽象了对象实例化过程。结构模式:这些模式处理不同的类和对象以提供新功能。行为模式:也称为发布-订阅模式,定义了一个被观察对象与多个观察者之间的一对多对象关系。并行设计模式:这些模式处理多线程编程范例。架构设计模式:这些模式用于处理架构设计。9.JS中的Array.splice()和Array.slice()方法有什么区别?话不多说,先看第一个例子:vararr=[0,1,2,3,4,5,6,7,8,9];//设置一个数组console.log(arr.slice(2,7));//2,3,4,5,6console.log(arr.splice(2,7));//2,3,4,5,6,7,8//由此我们简单猜测两个函数参数的含义,slice(start,end)的第一个参数表示起始位置,第二个表示截取位置位置(不包括这个位置)splice(start,length)第一个参数开始位置,第二个参数截取长度然后看第二个:varx=y=[0,1,2,3,4,5,6,7,8,9]console.log(x.slice(2,5));//2,3,4console.log(x);[0,1,2,3,4,5,6,7,8,9]原数组没有变化//然后用同样的方法测试spliceconsole.log(y.splice(2,5));//2,3,4,5,6console.log(y);//[0,1,7,8,9]表示原数组中的值已经被消去。虽然slice和splice都是截取数组对象,但是两者还是有明显区别的。函数参数slice和splice第一个参数是截取的起始位置,slice的第二个参数是截取的结束位置(不包含),splice的第二个参数(表示从起始截取的长度position),slice不会改变原数组,splice会直接移除原数组中截取的数据!10.如何在JS中动态增删对象属性?我们可以使用object.property_name=value为对象添加属性,deleteobject.property_name用于删除属性。例如:letuser=newObject();//添加一个属性user.name='Anil';user.age=25;console.log(user);deleteuser.age;console.log(user);11.解释什么是承诺?promise是js中的一个对象,它产生一个值,将来可能产生一个结果。该值可以是已解析的值或未解析该值的原因。Promise可以有三种状态:pending:初始状态,既不成功也不失败fulfilled:表示操作完全成功rejected:表示操作失败处于等待状态的promise对象可以在成功后返回一个值,也可以在成功后带回一个值failureError当这两种情况发生时,handler函数将被排队等待执行,然后调用then方法。大家都说简历里没项目可写,所以给大家找了一个项目,还给了一个【搭建教程】。我和阿里云服务器合作,优惠价格比较便宜:89/年,223/3年,比学生便宜9.9/月,买了建了一个项目,熟悉技术栈比较香(老用户可以买用他们的家庭账户,我用我妈妈的)推荐购买三年的便宜货,点击本文查看。12、数组去重有哪些方法1、使用setfunctionuniquearray(array){letunique_array=Array.from(set(array))returnunique_array;}2、使用filterfunctionunque_array(arr){letunique_array=arr.filter(函数(elem,index,self){returnindex==self.indexOf(elem);})返回unique_array;}console.log(unique_array(array_with_duplicates));3.使用for循环Arraydups_names=['Ron','Pal','Fred','Rongo','Ron'];functiondups_array(dups_names){letunique={};名字。forEach(function(i){如果(!unique[i]){unique[i]=true;}});returnObject.keys(unique);}//Ron,Pal,Fred,RongoDups_array(names);13.undefined、null和undeclared有什么区别?1.null表示“无对象”,即这里不应该有值,转为值时为0。典型的用法是:(1)作为函数的参数,表示函数的参数不是对象。(2)作为对象原型链的终点。2.undefined表示“缺失值”,即这里应该有一个值,但是还没有定义,转换成一个值就是NaN。典型的用法是:(1)当一个变量被声明但没有赋值时,等于undefined。(2)调用函数时,应该提供的参数没有提供,参数等于undefined。(3)对象没有赋值属性,该属性的值未定义。(4)当函数没有返回值时,默认返回undefined。3.undeclared:js语法错误,没有声明直接使用,js找不到对应的context。14.列出JS原始数据类型和非原始数据类型的一些区别?1、目前JS中有6种基本数据类型:Undefined、Null、Boolean、Number、Symbol和String。还有一种复杂的数据类型——Object,Object本质上是由一组无序的名值对组成的。Object、Array和Function是引用类型。2.基本数据类型是不可变的,非基本数据类型是可变的。3.原始数据类型是不可变的,因为它们一旦创建就不能改变,但是非原始数据类型是刚性的,这意味着一旦创建了一个对象,它就可以改变。4.原始数据类型与其值进行比较,意思是两个值如果是相同的数据类型并且具有相同的值则严格相等。5.非基本数据类型不与值进行比较。例如,如果两个对象具有相同的属性和值,则它们严格不相等。15.如何向现有函数添加新属性向现有函数添加新属性很容易,只需为现有函数赋值即可。例如,已有一个对象person,下面的代码用于给person增加新的属性:person.country="India";16、JS中深拷贝和浅拷贝有什么区别?深拷贝递归地拷贝新对象中的所有值或属性,而拷贝只拷贝引用。在深拷贝中,新对象的改变不会影响原对象,而在浅拷贝中,新对象的改变也会影响原对象。在深拷贝中,原始对象与新对象不共享相同的属性,而在浅拷贝中,它们具有相同的属性。17.如何在JavaScript中每隔x秒调用一个函数在JS中,我们使用函数setInterval()来每隔x秒调用一个函数。如:setInterval(function(){alert("Hello");},3000);18.解释一下JS的展开运算符?扩展运算符扩展了一个表达式,其中需要多个参数/变量/元素,它使用三个点(...)。例如:varmid=[3,4];varnewarray=[1,2,...mid,5,6];控制台日志(新数组);//[1,2,3,4,5,6]19.JS中的宿主对象和原生对象有什么区别?宿主对象:这些是运行时环境提供的对象。这意味着它们在不同的环境中是不同的。例如,浏览器包含窗口这样的对象,但是Node.js环境提供了节点列表这样的对象。本机对象:这些是JS中的内置对象。它们也被称为全局对象,因为内置对象如果使用JS则不受运行环境的影响。20.解释JS中的高阶函数?高阶函数是JS函数式编程的最佳特性。它是一个函数,它接受一个函数作为参数并返回一个函数作为结果。一些内置的高阶函数有map、filter、reduce等。21.JS中==和===有什么区别?1.对于string、number等基本类型,==和===是有区别的1)不同类型之间的比较,==比较“转换成同一类型的值”,看“值”是否是相等,===如果类型不同,结果不相等。2)同类型比较,直接进行“值”比较,两者结果相同。2、对于Array、Object等高级类型,对于“指针地址”的比较,==和===没有区别。3、基本类型和高级类型有区别,==和===1)对于==,高级类型转换为基本类型,进行“值”比较。2)因为类型不同,===结果为false。22.什么是JS中的匿名函数?匿名函数:就是没有函数名的函数,如:(function(x,y){alert(x+y);})(2,3);这里创建了一个匿名函数(第一个括号内),第二个括号用于调用匿名函数并传入参数。23.JS可以做301重定向吗?JS完全运行在客户端。301是服务器发送的响应代码。所以不可能在JS中进行301重定向。24.解释JS中的事件冒泡和事件捕获事件捕获和冒泡:在HTMLDOMAPI中,有两种事件传播的方法,它们决定了接收事件的顺序。这两种方法是事件冒泡和事件捕获。第一种方法事件冒泡将事件定向到其预期目标,第二种方法称为事件捕获,其中事件向下传播到元素。事件捕捉捕捉过程很少用到,但一旦用到,就证明非常有用。此过程也称为涓流模式。在这个过程中,事件首先被最外层元素捕获,然后传播到最内层元素。例如:
