热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

史上最全的js、jQuery面试题

web前端|js教程js,jQueryweb前端-js教程html撒金币源码,树莓派ubuntu解压,爬虫遇见汉字拼音,.php破解,seo优化商家lzwjs、jQuery面试题整

web前端|js教程史上最全的js、jQuery面试题
js,jQuery
web前端-js教程
html撒金币源码,树莓派 ubuntu解压,爬虫遇见汉字拼音,.php破解,seo优化商家lzw
js、jQuery面试题整理
html 导航 源码,vscode获取dom节点提示,win7主题ubuntu,tomcat7 项目配置,sqlite转义字符%,网页设计开发培训班,dedecms数据库表前缀修改,韩国服务器租用价格,WordPress手机插件耗费CPU,优质前端框架,避免反爬虫,php 获取网页源码,seo每天的工作内容,springboot模块图,婚庆类网站模板免费下载,购物车网页模板下载,mip手机网站模板,后台模板 jquery,wordpress 默认页面自适应,供应链管理系统源码,小说网站需要什么建站程序lzw
1.数据类型
.net图书销售网站源码,ubuntu指令不能输入,tomcat部署war包释放,nutch爬虫管理,php接口案例,专业seo有话要多少钱lzw
基本类型:除Object、String、Number、boolean、null、undefined。

引用类型:object。里面包含的 function、Array、Date。

2.数组方法

join():数组转为字符串,可带中间符号

push():数组尾部添加内容,返回新长度

pop():数组尾部删除一条内容,返回长度

unshift():数组头部添加内容,返回新长度

shift():数组头部删除一条内容,返回删除内容

sort():数组内容从大到小排序

reverse():反转数组内容项

concat():拼接数组,若无内容复制数组内容

slice():截取数组,从指定下标开始

splice():删除、插入、替换;

删除:2 个参数:要删除的第一项的位置和要删除的项数。插入:3 个参数:起始位置、 0(要删除的项数)和要插入的项。替换:3 个参数:起始位置、要删除的项数和要插入的任意数量的项。

3.字符串方法

charAt():根据下标找到对应值

charCodeAt():通过下标值找到对应字符Unicode编码

indexOf():通过字符查找对应下标(首次出现)

lastIndexOf():通过字符找最后一次出现的下标值

slice():截取字符串,2个参数,(起始位置,结束位置)

split():把字符串按分隔符分割成数组

substring():截取字符串,(起始位置,结束位置)

substr():截取指定位置和长度的字符串,(起始位置,长度)

toLowerCase():字符串转为小写

toUpperCase():字符串转成大写

trim():去掉字符串前后所有空格

4.阻止冒泡,阻止默认事件

阻止冒泡:

e.stopPropagatione.cancleBubble=true(IE)return false;

阻止默认事件:

e.preventDefault();e.returnValue=false;(IE)return false;

5.函数作用域

函数作用域是指在函数内声明的所有变量在函数体内始终是可见的,可以在整个函数的范围内使用及复用.

全局变量:声明在函数外部的变量,在代码中任何地方都能访问到的对象拥有全局作用域(所有没有var直接赋值的变量都属于全局变量)

局部变量:声明在函数内部的变量,局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部,所有在一些地方也会看到有人把这种作用域称为函数作用域。

6.闭包

外部函数访问内部函数,能够读取其他函数内部变量的函数。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

7.原型链

每个对象都有一个原型_proto_,这个原型还可以有它自己的原型,以此类推,形成一个原型链。

prototype属性,函数的原型对象,它是函数所独有的,它是从一个函数指向一个对象。__proto__是指向构造函数的原型对象,它是对象独有的。

8.继承的几种方式

构造函数继承:在Child里面,把Parent的this指向改为是Child的this指向,从而实现继承
缺点:只能解决属性的继承,使用属性的值不重复,但是父级类别的方法不能继承原型链继承:把Child的原型改为是Parent的实例,从而实现继承
缺点:因为Child的原型对象都是New Parent,所以实例化出来的对象的属性都是一样的,而且Parent上面的引用类型只要有一个实例对象修改了,其他也会跟着修改.因为他们原型对象都是共用的组合方式继承(组合前两种):
缺点:父类的原型对象调用了两次,没有必要,而且student实例的构造函数是来自于Person还有两种组合式继承优化

9.函数创建的方式

函数声明:

function Fn(){}

字面量/函数表达式:

var m = function(){}

构造函数:

var sum =new Function(“n1”,”n2”,”return n1+n2”)

10.如何解决异步回调地狱

promise、generator、async/await

promise

let getStuPromise = new Promise((resolve,reject)=>{ getStu(function(res){ resolve(res.data); });});getStuPromise.then((data)=>{ // 得到每个学生的课程 getCourse(); // 还可以继续返回promise 对象})

generator

function *generatorGetStu(){ let stus = yield getStu(); // 等到getStu异步执行完才会执行getCourse let course = yield getCourse();}

async/await
async函数是Generator函数的语法糖。使用 关键字async来表示,在函数内部使用await来表示异步

11.事件委托理解

通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这个事件.
原理: 利用冒泡的原理,把事件加到父级上,触发执行效果。
target 事件属性可返回事件的目标节点(触发 该事件的节点)

oUl.Onmouseover= function(ev){ var ev = ev || window.event; var target = ev.target || ev.srcElement; if(target.nodeeName.toLowerCase() == "li"){ target.style.background = "red"; }}

12.图片的懒加载和预加载

预加载:常用的是new Image();,设置其src来实现预载,再使用onload方法回调预载完成事件。

function loadImage(url, callback){ var img = new Image(); //创建一个Image对象,实现图片预下载 img.src = url; if (img.complete){ // 如果图片已经存在于浏览器缓存,直接调用回调函数 callback.call(img); return; // 直接返回,不用再处理onload事件 } img.Onload= function (){ //图片下载完毕时异步调用callback函数。 callback.call(img);//将回调函数的this替换为Image对象 ,如果你直接用img.width的时候,图片还没有完全下载下来 };}

懒加载:主要目的是作为服务器前端的优化,缓解服务器前端压力,一次性请求次数减少或延迟请求。
实现方式:

1.第一种是纯粹的延迟加载,使用setTimeOut、setInterval进行加载延迟.

2.第二种是条件加载,符合某些条件,或触发了某些事件才开始异步下载。

3.第三种是可视区加载,即仅加载用户可以看到的区域,这个主要由监控滚动条来实现,一般会在距用户看到某图片前一定距离遍开始加载,这样能保证用户拉下时正好能看到图片。

13.bind,apply,call的区别

都可以改变函数内部this指向
区别:

callcall传递参数aru1, aru2… 形式apply传递参数必须数组形式[arg]bind不会调用函数,可以改变函数内部this指向主要应用场景:
1、call经常做继承。
2、apply经常跟数组有关系。比如借助于数学对象实现数组最大值最小值。
3、bind不会调用函数,可以改变函数内部this指向。

14.js的节流和防抖

防抖:当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定时间到来之前,又触发了事件,就重新开始延时。也就是说当一个用户一直触发这个函数,且每次触发函数的间隔小于既定时间,那么防抖的情况下只会执行一次。节流:当持续触发事件时,保证在一定时间内只调用一次事件处理函数,意思就是说,假设一个用户一直触发这个函数,且每次触发小于既定值,函数节流会每隔这个时间调用一次。时间戳和定时器区别:防抖是将多次执行变为最后一次执行,节流是将多次执行变为每隔一段时间执行。

15.前端模块化和组件化

模块化:可复用,侧重的功能的封装,主要是针对Javascript代码,隔离、组织复制的Javascript代码,将它封装成一个个具有特定功能的的模块。组件化:可复用,更多关注的UI部分,页面的每个部件,比如头部,弹出框甚至确认按钮都可以成为一个组件,每个组件有独立的HTML、css、js代码。

16.js单线程怎么执行异步操作

Js作为浏览器脚本语言,它的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。

js怎么异步:浏览器只分配给js一个主线程,用来执行任务(函数),但一次只能执行一个任务,这些任务形成一个任务队列排队等候执行,但前端的某些任务是非常耗时的,比如网络请求,定时器和事件监听,如果让他们和别的任务一样,执行效率会非常的低,甚至导致页面的假死。

所以,浏览器为这些耗时任务开辟了另外的线程,主要包括http请求线程,浏览器定时触发器,浏览器事件触发线程,这些任务是异步的。这些异步任务完成后通过回调函数让主线程知道。

17.手写promise函数

三种状态:pending(过渡)fulfilled(完成)rejected(失败)

function Promise(exector){ let _this = this; //status表示一种状态 let status = “pending”; let value = undefined; let reason = undefined; //成功 function resolve(value){ if(status == “pending”){ _this.value = value; _this.status = “resolve”; } } //执行失败 function reject(value){ if(status == “pending”){ _this.value = value; _this.status = “reject” } } //异步操作 try{ exector(resolve,reject) }catch(e){ reject(e) } //测试then Promise.prototype.then = function(reject,resolve){ let _this = this; if(this.status == “resolve”){ reject(_this.value) } if(this.status == “reject”){ resolve(_this.reason) } }}//new Promise测试let promise = new Promise((reject,resolve)=>{ resolve(“return resolve”);});promise.then(data=>{ console.log(`success${data}`);},err=>{ console.log(`err${data}`);})

18.数组去重

1.遍历并两个对比,splice删除重复的第二个

function unique(arr){ for(var i=0; i

2.indexOf

function unique(arr) { var array = []; for (var i = 0; i

3.sort

function unique(arr) { arr = arr.sort() var arrry= [arr[0]]; for (var i = 1; i

4.includes (ES6)

function unique(arr) { var array =[]; for(var i = 0; i

19.数组排序

冒泡排序:

var arr=[1,5,7,9,16,2,4];//冒泡排序,每一趟找出最大的,总共比较次数为arr.length-1次,每次的比较次数为arr.length-1次,依次递减var temp;for(var i=0;i

选择排序:(相邻对比)

var arr=[1,23,5,8,11,78,45];var temp;for(var i=0;i

sort():

var arr=[1,5,7,9,16,2,4];arr.sort(function(a,b){ return b-a; //降序排列,return a-b; —>升序排列}) //括号里不写回调函数,则默认按照字母逐位升序排列,结果为[1,16,2,4,5,7,9]

20.去除首尾空格

Javascript 本身并不提供 trim() 方法,不过可以用正则表达式(其中一种)

if(typeof(String.prototype.trim) === "undefined"){ String.prototype.trim = function() { return String(this).replace(/^\s+|\s+$/g, ''); };} if(" dog ".trim() === "dog") { document.write("去除首尾空格成功"); }

21.解决跨域方案

jsonp:包含回调函数和数据

//1、使用JS动态生成script标签,进行跨域操作function handleResponse(response){ console.log('The responsed data is: '+response.data); //处理获得的Json数据}var script = document.createElement('script');script.src = 'http://www.example.com/data/?callback=handleResponse';document.body.insertBefore(script, document.body.firstChild);//2、手动生成script标签function handleResponse(response){ console.log('The responsed data is: '+response.data); //处理获得的Json数据}//3、使用jQuery进行jsonp操作//jquery会自动生成一个全局函数来替换callback=?中的问号,之后获取到数据后又会自动销毁//$.getJSON方法会自动判断是否跨域,不跨域的话,就调用普通的ajax方法;跨域的话,则会以异步加载js文件的形式来调用jsonp的回调函数。 $.getJson('http://www.example.com/data/?callback=?',function(jsondata){ //处理获得的Json数据});

window.name + iframelocation.hash+iframewindow.postMessage(HTML5中的XMLHttpRequest Level 2中的API)通过document.domain+iframe来跨子域(只有在主域相同的时候才能使用该方法)使用跨域资源共享(CORS)来跨域使用Web sockets来跨域使用flash URLLoader来跨域

22.手写ajax

ajax的技术核心是 XMLHttpRequest 对象;
ajax 请求过程:创建 XMLHttpRequest 对象、连接服务器、发送请求、接收响应数据;

(理解)//通过createXHR()函数创建一个XHR对象:function createXHR() { if (window.XMLHttpRequest) { //IE7+、Firefox、Opera、Chrome 和Safari return new XMLHttpRequest(); } else if (window.ActiveXObject) { //IE6 及以下 var versiOns= ['MSXML2.XMLHttp','Microsoft.XMLHTTP']; for (var i = 0,len = versions.length; i

实例:

ajax({ method : 'het/post', url : '...', data : { }, success : function (res) { }, error : function(err){ }, async : true});

23.ES6

简述,具体请参考https://blog.csdn.net/Juliet_xmj/article/details/103940173

字符串扩展解构表达式函数优化函数参数默认值箭头函数对象的函数属性简写箭头函数结合解构表达式map:接收一个函数,将原数组中的所有元素用这个函数处理后放入新数组返回。reduce:接收一个函数(必须)和一个初始值(可选),该函数接收两个参数:(上一次reduce处理的结果,数组中要处理的下一个元素)promise

const promise = new Promise(function(resolve, reject) { // ... 执行异步操作 if (/* 异步操作成功 */){ resolve(value);// 调用resolve,代表Promise将返回成功的结果 } else { reject(error);// 调用reject,代表Promise会返回失败结果 }});promise.then(function(value){ // 异步执行成功后的回调}).catch(function(error){ // 异步执行失败后的回调 })

set:本质与数组类似。不同在于Set中只能保存不同元素,如果元素相同会被忽略。map:本质是与Object类似的结构。不同在于,Object强制规定key只能是字符串。而 Map结构的key可以是任意对象。模块化:把代码进行拆分,方便重复利用对象扩展数组扩展

24.BOM,DOM

BOM:指的是浏览器对象模型,它使Javascript有能力与浏览器进行“对话”DOM:是指文档对象模型,通过它,可以范文HTLM文档的所有元素window对象:是客户端Javascript最高层对象之一,由于window对象是其他大部分对象的共同祖先,在调用window对象的方法和属性时,可以省略window对象的应用。

25.jQuery选择器

元素选择器:$(“p.intro”)选取所有 class=“intro” 的

元素。属性选择器:$(“[href=’#’]”)选取所有带有 href 值等于 “#” 的元素。css选择器:$(“p”).css(“background-color”,”red”);

26.隐式迭代

遍历内部DOM元素(伪数组形式存储)的过程,给匹配到的所有元素进行循环遍历,执行相应的方法,而不需要我们自己进行循环遍历

  • web
  • 前端
//js$("li").html("WEB前端梦之蓝"); //将所有的li标签html内容全部换成“WEB前端梦之蓝”,这个就属于隐式迭代

感谢大家的阅读,希望大家面试成功。

本文转自:https://blog.csdn.net/Juliet_xmj/article/details/106982585

推荐教学:《JS教学》,《jQuery教学》


推荐阅读
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文介绍了在Web应用系统中,数据库性能是导致系统性能瓶颈最主要的原因之一,尤其是在大规模系统中,数据库集群已经成为必备的配置之一。文章详细介绍了主从数据库架构的好处和实验环境的搭建方法,包括主数据库的配置文件修改和设置需要同步的数据库等内容。MySQL的主从复制功能在国内外大型网站架构体系中被广泛采用,本文总结了作者在实际的Web项目中的实践经验。 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
author-avatar
妩媚的麻醉效应
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有