史上最全的web前端面试题汇总及答案,前端刷面试题的网站

②引入写好的js文件,使用语句

也是直接放入到head标签里头,也有的是放在前面。

2、输入框的验证用什么事件?

change(fn)

3、undefined与null有何异同?

null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。

undefined:

(1)变量被声明了,但没有赋值时,就等于undefined。

(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。

(3)对象没有赋值的属性,该属性的值为undefined。

(4)函数没有返回值时,默认返回undefined。

null:

(1) 作为函数的参数,表示该函数的参数不是对象。

(2) 作为对象原型链的终点。

它们都表示空,转换为boolean后都为false,但是null代表一个对象变量已经被初始化,但未装入对象;undefined表示未初始化变量

4、=有何异同?

相同点:都是判定两个值是否相等

不同点:不会判断类型,而=会判断类型

5、如何判断一个变量的值是否为数字?以及有哪些手段判断变量值的数据类型?

全局函数isNaN可以判断一个变量的值是否为数字。

可以使用运算符type、instanceof判断变量值的数据类型。

6、什么是Bom什么是Dom?你如何理解Dom?

链接标记target与Dom,Bom

7、Array的join、push、splice、slice各有何用途,splice与slice有何异同?

join:使用指定间隔符连接所有元素为字符串

push:在尾部添加元素并维护array实例的length

splice与slice都是截取一部分元素。不同的在于:slice返回截取后的新实例,splice在原array实例上操作,更详细的请见下文链接。

JS中数组对象详解

8、如何阻止表单提交?

在onsubmit事件中返回false

9、如何动态操作表格?

可以像普通dom一样操作,但是因为表格的dom比较复杂,所以我通常是使用table的insertRow、deleteRow及tr对象的insetCell、deleteCell操作。

10、String.match与RegExp.exec有何区别?

match只会返回没有分组的全部匹配结果或者有分组的第一次匹配结果;

而exec可以利用循环返回全部匹配结果。

11、为验证手机号写一个正则。

function checkSubmitMobil()

{

if ($(“#phoneNum”).val() == “”) {

alert(“手机号码不能为空!”);

//$(“#moileMsg”).html(“手机号码不能为空!”);

$(“#mobile”).focus();

return false;

}

if (!KaTeX parse error: Expected 'EOF', got '#' at position 3: ("#̲phoneNum").val(…/))

{

alert(“手机号码格式不正确!”);

//$(“#moileMsg”).html(“手机号码格式不正确!请重新输入!”);

$(“#phoneNum”).focus();

return false;

}

return true;

}

12、正则的i标记与g标记各有何用途?

i:不区分大小写;

g:全局匹配。

13、为String添加trim()方法。

String.prototype.trim = function() {

return this.replace(/^ +| +$/g,“”);

}

14、简述COOKIE。在JS中如何操作Cookie?

简述cookie,在JS中如何操作cookie

15、谈谈javascript数组排序方法sort()的使用,重点介绍sort()参数的使用及其内部机制。

JS数组排序方法sort()的使用

16、谈谈innerHTML outerHTML innerText之间的区别。

①innerHTML是w3c的html dom定义的方法,而后两者是IE独有的方法;

②innerHTML代表一个元素节点内由所有子节点,不包括当前节点组成的html代码;

③outerHTML代表一个元素节点内由所有子节点和当前节点组成的html代码;

④innerText代表一个元素节点内由所有子文本节点内容组成的文本;

17、在JavaScript中定时调用函数 foo() 如何写?

setTimeout(

foo,

1000 //这里设置延时数

);

18、setTimeout与setInterval有何区别?

①setTimeout和setInterval的语法相同。它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码。

②不过这两个函数还是有区别的,setInterval在执行完一次代码之后,经过了那个固定的时间间隔,它还会自动重复执行代码,而setTimeout只执行一次那段代码。

19、你在js中用过array吗?如果用过,array中添加数据用什么方法?

在尾部添加使用push();

在头部添加使用unshift();

在任意位置添加使用splice(),但要注意把它的删除个数设置为0;

array详细介绍请看下文链接

JS中数组对象详解

20、简述javascript的优缺点。

**优点:**简单易用,与Java有类似的语法,可以使用任何文本编辑工具编写,只需要浏览器就可执行程序,并且事先不用编译,逐行执行,无需进行严格的变量声明,而且内置大量现成对象,编写少量程序可以完成目标;

**缺点:**不适合开发大型应用程序;

21、Javascript有哪些内置对象?

只有Math和Global(在浏览器环境中,Global就是Window)

22、列举Javascript的本地对象。

Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError

23、javascript的typeof返回哪些数据类型

object number function boolean undefind string

24、例举3种强制类型转换和2种隐式类型转换?

强制(parseInt,parseFloat,number)

隐式(== – ===)

25、IE和DOM事件流的区别

①执行顺序不一样、

②参数不一样

③事件加不加on

④this指向问题

26、事件绑定和普通事件有什么区别

①事件绑定就是针对dom元素的事件,绑定在dom元素上

②普通事件即为非针对dom元素的事件

27、事件委托是什么

利用事件冒泡的原理,让自己的所触发的事件,由他的父元素代替执行!

通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这个事件。

例子请看以下链接

JS中的事件委托

28、闭包是什么,有什么特性,对页面有什么影响

什么是闭包

“官方”的解释:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

在 Scala、Scheme、Common Lisp、Smalltalk、Groovy、JavaScript、Ruby、 Python、Go、Lua、objective c、swift 以及Java(Java8及以上)等语言中都能找到对闭包不同程度的支持。

通俗的讲就是函数a的内部函数b,被函数a外部的一个变量引用的时候,就创建了一个闭包。

闭包的特性:

①.封闭性:外界无法访问闭包内部的数据,如果在闭包内声明变量,外界是无法访问的,除非闭包主动向外界提供访问接口;

②.持久性:一般的函数,调用完毕之后,系统自动注销函数,而对于闭包来说,在外部函数被调用之后,闭包结构依然保存在;

对页面的影响

使用闭包会占有内存资源,过多的使用闭包会导致内存溢出等。

详细请看以下推荐链接

深入理解JavaScript的闭包特性 如何给循环中的对象添加事件

29、javascript的本地对象,内置对象和宿主对象

①本地对象为array obj regexp等可以new实例化

②内置对象为gload Math 等不可以实例化的

③宿主为浏览器自带的document,window 等

30、编写一个数组去重的方法

思路:

1.创建一个新的数组存放结果

2.创建一个空对象

3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。

说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。

代码如下:

Array.prototype.unique3 = function(){

var res = [];

var json = {};

for(var i = 0; i < this.length; i++){

if(!json[this[i]]){

res.push(this[i]);

json[this[i]] = 1;

}

}

return res;

}

var arr = [112,112,34,‘你好’,112,112,34,‘你好’,‘str’,‘str1’];

alert(arr.unique3());

31、this对象的理解

①this总是指向函数的直接调用者(而非间接调用者);

②如果有new关键字,this指向new出来的那个对象;

③在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent中的this总是指向全局对象Window;

32、eval是做什么的?

①它的功能是把对应的字符串解析成JS代码并运行;

②应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。

③由JSON字符串转换为JSON对象的时候可以用eval,var obj =eval('('+ str +')');

33、new操作符具体干了什么呢?

①创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。

②属性和方法被加入到 this 引用的对象中。

③新创建的对象由 this 所引用,并且最后隐式的返回 this 。

34、call() 和 apply() 的区别和作用?

①apply()函数有两个参数:第一个参数是上下文,第二个参数是参数组成的数组。如果上下文是null,则使用全局对象代替。

如:function.apply(this,[1,2,3]);

②call()的第一个参数是上下文,后续是实例传入的参数序列。

如:function.call(this,1,2,3);

如何获取UA

JS代码

function whatBrowser() {

document.Browser.Name.value=navigator.appName;

document.Browser.Version.value=navigator.appVersion;

document.Browser.Code.value=navigator.appCodeName;

document.Browser.Agent.value=navigator.userAgent;

}

35、请解释一下 JavaScript 的同源策略

**概念:**同源策略是客户端脚本(尤其是Javascript)的重要的安全度量标准。它最早出自Netscape Navigator2.0,其目的是防止某个文档或脚本从多个不同源装载。

这里的同源策略指的是:协议,域名,端口相同,同源策略是一种安全协议。指一段脚本只能读取来自同一来源的窗口和文档的属性。

为什么要有同源限制?

我们举例说明:比如一个黑客程序,他利用Iframe把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,他的页面就可以通过Javascript读取到你的表单中input中的内容,这样用户名,密码就轻松到手了。

36、请描述一下 cookies,sessionStorage 和 localStorage 的区别?

cookie在浏览器和服务器间来回传递。 sessionStorage和localStorage不会

sessionStorage和localStorage的存储空间更大;

sessionStorage和localStorage有更多丰富易用的接口;

sessionStorage和localStorage各自独立的存储空间;

Ajax


1、什么是Ajax?

Ajax(Asynchronous JavaScript + XML),即异步JavaScript + XML的缩写,主要用来页面异步刷新,也是构建RIA的一种基础技术。

2、如何使用Ajax从服务器获取数据?

①创建XMLHttpRequest对象,注意兼容IE6的情况

②使用XMLHttpRequest对象的open方法,其中有三个参数:

a.字符串,代表html的请求:GET,POST。

b.要访问的服务器的URL。

c.Boolean值,true表示异步,flase表示同步,一般情况下是异步,默认为true。

③ajax的回调函数。xhr.readyState==4表示请求已经结束,服务器响应完成。

status表示http请求的状态,200表示正常响应;404表示资源找不到;500表示服务器端错误。

④发送ajax请求。如果没有数据,可以不传或者传递null;如果post请求传递数据:首先设置xhr的请求头信息:

xhr.setRequestHeader(“Content-type”,“application/x-www-formurlencoded”);

再传递参数:

xhr.send(name=liujianhong&password=123);

3、解释XMLHttpRequest是什么?

XMLHttpRequest是我们得以实现异步通讯的根本。最早在IE5 中以ActiveX组件实现;最近,Mozilla 1.0和Safari 1.2中实现为本地对象。XMLHttpRequest虽然不是W3C标准,但却得到了FireFox、Safari、Opera、Konqueror、IE等绝大多数浏览器的支持。

4、谈谈你对Ajax的理解。你在项目中如何使用Ajax?手写一个简单的Ajax操作。

Ajax(Asynchronous JavaScript + XML),即异步JavaScript + XML的缩写,主要用来页面异步刷新,也是构建RIA的一种基础技术。因为它涉及浏览器兼容、跨域等问题,在项目中一般会使用一些基础类库辅助实现,如jQuery等。

一个简单的Ajax操作如下。

var xhr = new XMLHttpRequest();

//在环境中需要做浏览器兼容,这里省略了

xhr.onreadystatechange = function() {

//这里注册当xhr状态发生改变后调用事件

if( xhr.readyState == 4 ) {

//通常在读取状态为4的时候才能获取到部分数据

所以一般状态在4的时候才进行处理

if(status==200) {

//当正常请求到资源时的处理,

可以调用xhr.responseText或xhr.responseXml获取数据

}

else {

//当请求资源失败时的处理

}

}

}

xhr.open( “GET”, url);

//设置xhr的请求方式和url,这里使用的是GET方式,

//如果有参数,则连接在url后面

/*

如果是POST请求,还当设置请求的Content-Type

数据使用send作为参数发送

*/

xhr.send();

5、谈谈你对JSON的理解。

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

所以它往往在AJAX中替代XML,交换数据。

6、你的项目中有使用到跨域吗?你在项目中是如何处理JS跨域问题的?

①有。

②主要是使用其它网站提供的javascript api如QQ。使用script的src可以直接读取跨域资源。

③当然跨域还有其它处理方式:如代理服务器、改变domain、JSONP等。

7、你在项目中有使用到网页到服务器的即时通信吗?说说你都采用什么手段处理以及你所知道的处理办法?

没有用到,但我知道html的websockets、flash的socket、ajax长轮询等都可以实现。

8、你在AJAX中有遇到乱码吗?如果遇到,你是如何解决的?

①遇到过。

②一般我首先统一页面和服务器编码,对请求和响应的Content-Type设置正确编码;对请求参数进行编码处理。

9、解释jsonp的原理,以及为什么不是真正的ajax

①Ajax与JSONP这两种技术看起来很像,目的也一样,都是请求一个url,然后把服务器返回的数据进行处理,因此jQuery等框架都把JSONP作为Ajax的一种形式。

②实际上Ajax与JSONP有着本质上的不同。Ajax的核心是通过XMLHttpRequest获取数据,而JSONP的核心则是动态添加

③Ajax与JSONP的区别也不在于是否跨域,Ajax通过服务端代理也可以跨域,JSONP也可获取同源数据。具体请看一下参考:

【原创】说说json和jsonp,也许你会豁然开朗,含jQuery用例

深入浅出jsonp–解决ajax跨域问题

浏览器的同源策略-MDN

10、ajax 有那些优缺点?如何解决跨域问题?

优点:

①通过异步模式,提升了用户体验.

②优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用.

③Ajax在客户端运行,承担了一部分本来由服务器承担的工作,减少了大用户量下的服务器负载。

④Ajax可以实现动态不刷新(局部刷新)

缺点:

①安全问题 AJAX暴露了与服务器交互的细节。

②对搜索引擎的支持比较弱。

③不容易调试。

跨域问题:

jsonp、 iframe、window.name、window.postMessage、服务器上设置代理页面。

11、JavaScript原型,原型链 ? 有什么特点?

①原型对象也是普通的对象,是对象一个自带隐式的 proto 属性,原型也有可能有自己的原型,如果一个原型对象的原型不为null的话,我们就称之为原型链。

②原型链是由一些用来继承和共享属性的对象组成的(有限的)对象链。

JQuery


1、你使用过jQuery吗?如果有,你为什么要使用jQuery呢?

①用过。

②如果使用原生javascript开发的话,会面临很多问题,如浏览器兼容、Ajax数据解析、Dom、事件注册操作等都非常烦锁,而jQuery正好解决了这些问题。

③当然jQuery还有非常有用的其它特性,如为dom对象绑定数据、动画、等。并且jQuery还非常容易扩展,在它的基础上开发非常灵活,也有众多的插件可用,如jQueryUI、easyUI等。

2、Javascript与jQuery有什么区别?

jquery 就对javascript的一个扩展,封装,就是让javascript更好用,更简单。

3、在jQuery中如何注册事件?

使用bind()方法注册事件,但通常我们使用与事件同名的方法注册更方便,如:click()、hover()等。

4、如何获取Html内容?如何获取文本内容?如何获取属性值?如何获取input值?如何创建新的节点?

可以使用html()获取html内容。

使用text()获取文本内容。

使用attr()可以获取属性值,使用css()可以获取样式属性值。

通过val()便可以获取input的值

把节点元素名加上<、>作为参数调用jQuery方法便可创建新节点,如:jQuery(“

”)。

5、如何向页面插入节点?

调用append方法,将新节点作为参数。

6、ajax、get、post、ajaxSetup、getJSON各有何用途?

①ajax:jQuery对ajax执行的核心方法。其它ajax方法都是使用该方法实现。

②get:专门用于发送get请求的便捷方法。

③post:专门用于发送post请求的便捷方法。

④ajaxSetup:设置调用ajax方法时的默认值。

⑤getJSON:专门用于向服务器请求json格式数据的便捷方法。

7、如何使用从服务器获取一个复杂数据(对象)?

①通常会把这个数据转换为通用的数据交换格式,如xml或json。由于xml解析比较麻烦,所以使用json比较多。

②在jQuery中有专门的获取服务器json数据的方法,getJSON(),在回调中,jQuery会自动将json转换为javascript对象。

8、addClass、css有何用途?

①addClass:为元素设置class属性,如果该元素已经存在class属性,则在其值后添加空格及新的class值。

②css:操作元素的style属性的方法。

9、如何获取一个元素的实际位置?

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

下面是我在学习HTML和CSS的时候整理的一些笔记,有兴趣的可以看下:

HTML、CSS部分截图

进阶阶段

进阶阶段,开始攻 JS,对于刚接触 JS 的初学者,确实比学习 HTML 和 CSS 有难度,但是只要肯下功夫,这部分对于你来说,也不是什么大问题。

JS 内容涉及到的知识点较多,看到网上有很多人建议你从头到尾抱着那本《JavaScript高级程序设计》学,我是不建议的,毕竟刚接触 JS 谁能看得下去,当时我也不能,也没那样做。

我这部分的学习技巧是,增加次数,减少单次看的内容。就是说,第一遍学习 JS 走马观花的看,看个大概,去找视频以及网站学习,不建议直接看书。因为看书看不下去的时候很打击你学下去的信心。

然后通过一些网站的小例子,开始动手敲代码,一定要去实践、实践、实践,这一遍是为了更好的去熟悉 JS 的语法。别只顾着来回的看知识点,眼高手低可不是个好习惯,我在这吃过亏,你懂的。

1、JavaScript 和 ES6

在这个过程你会发现,有很多 JS 知识点你并不能更好的理解为什么这么设计,以及这样设计的好处是什么,这就逼着让你去学习这单个知识点的来龙去脉,去哪学?第一,书籍,我知道你不喜欢看,我最近通过刷大厂面试题整理了一份前端核心知识笔记,比较书籍更精简,一句废话都没有,这份笔记也让我通过跳槽从8k涨成20k。

JavaScript部分截图

2、前端框架

前端框架太多了,真的学不动了,别慌,其实对于前端的三大马车,Angular、React、Vue 只要把其中一种框架学明白,底层原理实现,其他两个学起来不会很吃力,这也取决于你以后就职的公司要求你会哪一个框架了,当然,会的越多越好,但是往往每个人的时间是有限的,对于自学的学生,或者即将面试找工作的人,当然要选择一门框架深挖原理。

以 Vue 为例,我整理了如下的面试题。

Vue部分截图

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

我这部分的学习技巧是,增加次数,减少单次看的内容。就是说,第一遍学习 JS 走马观花的看,看个大概,去找视频以及网站学习,不建议直接看书。因为看书看不下去的时候很打击你学下去的信心。

然后通过一些网站的小例子,开始动手敲代码,一定要去实践、实践、实践,这一遍是为了更好的去熟悉 JS 的语法。别只顾着来回的看知识点,眼高手低可不是个好习惯,我在这吃过亏,你懂的。

1、JavaScript 和 ES6

在这个过程你会发现,有很多 JS 知识点你并不能更好的理解为什么这么设计,以及这样设计的好处是什么,这就逼着让你去学习这单个知识点的来龙去脉,去哪学?第一,书籍,我知道你不喜欢看,我最近通过刷大厂面试题整理了一份前端核心知识笔记,比较书籍更精简,一句废话都没有,这份笔记也让我通过跳槽从8k涨成20k。

JavaScript部分截图

2、前端框架

前端框架太多了,真的学不动了,别慌,其实对于前端的三大马车,Angular、React、Vue 只要把其中一种框架学明白,底层原理实现,其他两个学起来不会很吃力,这也取决于你以后就职的公司要求你会哪一个框架了,当然,会的越多越好,但是往往每个人的时间是有限的,对于自学的学生,或者即将面试找工作的人,当然要选择一门框架深挖原理。

以 Vue 为例,我整理了如下的面试题。

Vue部分截图

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-mlGMQUxn-1712945011923)]

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值