您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

BAT和各大互联网公司2020年前台笔试试题- JavaScript文章 《网站代码》

  • 时间:2022-08-10 01:09 编辑: 来源: 阅读:308
  • 扫一扫,手机访问
摘要:BAT和各大互联网公司2020年前台笔试试题- JavaScript文章 《网站代码》
1.请谈谈Cookie的优缺点:极高的可扩展性和可用性数据持久性。 不需要服务器资源。 Cookie存储在客户端,发送后由服务器读取。 可配置的过期规则 控制cookie的生命周期,使它们不会永远有效。 小偷很可能得到过期的饼干。 简单 基于文本的轻量级结构 通过良好的编程,控制存储在cookie中的会话对象的大小。 通过加密和安全传输技术(SSL),降低了cookie被破解的可能性。 只在cookie中存储不敏感数据,即使被盗也不会有重大损失。 缺点:限制了Cookie的数量和长度 数量:每个域的cookie总数是有限的。 A) IE6或更低版本最多可以有20个cookieb) IE7及更高版本最多可以有50个cookiec) Firefox最多可以有50个cookied) chrome和Safari对长度没有硬性限制:每个cookie的长度不能超过4KB (4096B),否则会被截掉。 潜在的安全风险 Cookie可能被阻止或被篡改。 如果cookie被阻止,就有可能获得所有会话信息。 客户被配置为禁用 一些客户禁用了浏览器或客户端设施接受cookie的能力,从而限制了这一功能。 有些状态无法在客户端保存。 例如,为了防止表单的重复提交,我们需要在服务器端保留一个计数器。 如果我们把这个计数器保存在客户端,就没有任何效果了。 2.Array.prototype.slice.call (arr,2)方法的作用是:在数组原型上使用slice方法,使用调用函数的第一个参数,使这个在这个方法中指向arr,传递参数2,实际上等于arr.slice(2),也就是从下标2截取到末尾。 3.3的数据类型有哪些?JavaScript?基本数据类型:string,boolean,number,undefined,null引用数据类型:object (array,date,regexp,function)那么问题来了,我们如何判断一个变量是否可以是数组数据类型呢?方法一。确定是否可以有“数组属性”,比如slice()方法。 你可以自己定义这个变量的slice方法,所以有时候会失败。方法二。在某些IE版本中,数组的obj实例不正确。方法三。这两种方法都有漏洞。ECMA脚本5中定义了一个新的方法Array.isArray()以确保其兼容性。最好的方式如下:if(type of array . isarray = = " undefined "){ array . isarray = function(arg){ return object . prototype . tostring . call(arg)= = "[object array]" };}4.浅谈浏览器的本地存储。一般来说,浏览器存储分为以下几种:1。Cookie存储,明文,大小限制4k等。2.本地存储,持久存储方式之一,不需要两端传输,限制大小为10M3,sessionStorage,会话级存储方式,浏览器关闭后数据立即丢失。4.indexDb,浏览器数据库5。原型链:原型链由原型对象组成,每个对象都有proto属性,指向创建该对象的构造函数的原型。Proto将对象连接起来形成原型链。 是用于继承和共享属性的有限对象链。 属性搜索机制:在搜索一个对象的属性时,如果实例对象本身的属性不存在,就会沿着原型链向上搜索,找到了就输出;如果它不存在,它将继续向上搜索原型链,直到顶部原型对象、Object.prototype或output未定义;;属性修改机制:只会修改实例对象本身的属性。如果不存在,将添加该属性。如果需要修改原型的属性,可以使用:b . prototype . x = 2;;但是,这将更改从此对象继承的所有实例的属性。 6.可变对象可变对象是执行上下文的一部分,可以概括为数据范围。其实也可以理解为一个简单的对象,存储执行上下文中的所有变量和函数公告(不包括函数表达式)。 主动对象(AO):当可变对象的上下文为主动EC时,称为主动对象。 7.作用域链我们知道可以在执行上下文中访问父变量甚至全局变量,这是作用域链的功劳。 作用域链可以理解为一组对象列表,包括父对象及其自身的变量对象,因此我们可以通过作用域链访问父对象中公布的变量或函数。 由两部分组成:[[scope]]属性:指向父变量对象和作用域链,即包含父变量的[[scope]]和AOAO;它自己的活动对象包含[[作用域]],这样就形成了一个自上而下的链式作用域。 8.闭包闭包属于一个特殊的作用域,叫做静态作用域。 它的定义可以理解为:当父函数被销毁时,父函数的单个变量对象和作用域链仍然保留在返回的子函数的[[作用域]]中,因此父变量对象可以被连续访问。这样的函数叫做闭包。 封闭会造成一个经典问题:多个子函数的[[scope]]都同时指向父函数,完全共享。 因此,当修改父变量对象时,所有的子函数都会受到影响。 处理:变量可以作为函数参数传入,避免使用默认的[[scope]]查找使用setTimeout包,通过第三个参数传入使用块级作用域,使变量成为自己上下文的属性,避免共享9。脚本介绍:html静态 即:// __proto__:表示原型对象链实例。[_ _ proto _ _...]= = instance.constructor.prototype//还真13。类型判断判断目标的类型,单独使用typeof是不能完全满足的。这其实不是bug,本质原因是JS的万物皆物论。 所以要完美判断,需要区别对待:基本类型(null):使用String(null)基本类型(String/number/boolean/undefined)+函数:直接使用typeof引用其他类型(Array/Date/RegExp错误)。:调用toString后根据[object XXX]做出稳定的判断包:let class 2 type = { } ' array date regexp object error '。拆分(“”)。foreach(e = >;class 2 type['[object '+e+']']= e . tolowercase())函数类型(obj) { if (obj == null)返回字符串(obj)obj的返回类型=== 'object '?class type[object . prototype . tostring . call(obj)]| | ' object ':obj的类型} 14。模块化模块化开发已经成为现代开发不可或缺的一部分,大大提高了项目的可维护性、可扩展性和协作性。 一般我们在浏览器中使用ES6的模块化支持,在节点中使用commonjs的模块化支持。 分类:oes 6:import/exporto commonjs:require/module . exports/exports OMD:require/defined require和import之间的区别or require支持动态导入,而import不支持。建议(babel支持)orequire是同步导入,导入是异步导入。orequire是价值复制,出口价值的变化不会影响进口价值;导入指向内存地址,导入值会随着导出值而变化。15.防抖节流。防抖节流功能是最常用的高频触发优化方法之一,对性能有很大帮助。 防抖(去抖):重复的高频操作被优化为仅在最后一次执行。通常使用的场景是:客户输入,只要输入再检查一次。 function debounce(fn,wait,immediate){ let timer = null return function(){ let args = arguments let context = this if(immediate & amp;& amp!timer) { fn.apply(context,args)} if(timer)clear time out(timer)timer = setTimeout(()= & gt;{fn。Apply (context,args)},wait)}} throttle:每隔一段时间执行一次,即降低频率,将高频操作优化为低频操作。通常使用场景:滚动条事件或resize事件,通常每隔100 ~ 500ms执行一次。 函数throttle(fn,wait,immediate){ let timer = null let call now = immediate return function(){ let context = this,args = arguments if(call now){ fn . apply(context,args) callNow = false } if(!timer){ timer = setTimeout(()= & gt;{fn.apply (context,args) timer = null},wait)}}为了不影响阅读体验,只参考部分面试问题,更多面试问题和答案可以【点击我】阅读下载~免费给大家参考,算是一个感恩的反馈吧。16.函数中函数的科里化技术,先填入几个参数,然后返回一个新的函数,称为函数的科里化。 通常可以用来为函数预置通用参数,用于重复调用,而不会侵入函数。 const add = function add(x){ return function(y){ return x+y } } const add 1 = add(1)add 1(2)= = 3 add 1(20)= = 2117。get请求的参数长度误区:我们常说GET请求的参数大小是有限的,而post请求的参数大小是无限的。 实际上,HTTP协议从来没有规定GET/POST的请求长度限制。 get请求的参数受源和浏览器或web服务器的限制,这就限制了url的长度。 为了澄清这个概念,我们必须再次强调以下几点:HTTP协议没有规定get和post的长度限制。显示GET的最大长度是因为浏览器和web服务器使用不同的URIs来限制浏览器和WEB服务器。如果支持IE,最大长度为2083byte,如果只支持Chrome,最大长度为8182byte18。18.缓存中辅助GET和POST请求的区别。GET和POST请求之间的区别没有详细说明。 在缓存中添加get和post的区别:get请求类似于搜索的过程。客户不需要每次都连接数据库就可以获取数据,所以可以使用缓存。 和post不一样,post一般做的是修改和删除的工作,所以要和数据库交互,所以不能用缓存。 因此,get请求适合于请求缓存。 19.谈论前台的事件流。HTML中与javascript的交互是通过事件驱动实现的,比如鼠标点击事件onclick、页面滚动事件onscroll等。您可以将事件侦听器添加到文档或文档中的元素来预订事件。 如果您想知道这些事件何时被调用,您需要理解“事件流”的概念 什么是事件流:事件流描述了从页面接收事件的顺序,DOM2级事件流包括以下几个阶段 事件的捕获阶段在目标阶段,事件冒泡阶段addevent listener:addevent listener是针对DOM2级别事件新添加的指定事件解析器的操作。该方法接收三个参数:要解析的事件的名称、作为事件解析器的函数和一个布尔值。 如果这个最后的布尔参数为真,则意味着事件处理程序在捕获阶段被调用;如果为false,则意味着事件处理程序在冒泡阶段被调用。 IE只支持事件冒泡。 20.如何让事件先冒泡再在DOM标准事件模型中捕获?是先捕捉再冒泡吗? 但是如果要达到先冒泡再抓图的效果,对于同一个事件,监控抓图和冒泡分别对应相应的解决函数。当捕获的事件被监视时,执行将被挂起,直到冒泡事件被捕获,然后被捕获。 21.事件委托简介:事件委托是指不是在事件发生的地方设置一个监控函数(直接dom),而是在其父元素中设置一个监控函数。通过事件冒泡,父元素可以监控其子元素中事件的触发,通过判断事件发生元素的DOM类型做出不同的响应。 比如最经典的例子就是ul和li标签的事件监控。比如我们在添加事件时,采用的是事件委托机制,不会直接添加到li标签,而是添加到ul父元素。 优点:更适合绑定动态元素,新增的子元素还可以有监控功能和事件触发机制。为了不影响阅读体验,只能参考部分面试问题,更多面试问题和答案可以阅读下载【点击我】~请免费参考我们,算是一个感恩的回馈吧。


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)
【技术支持|常见问题】别告诉我你没看过邰方这两则有思想的创意广告! (2022-11-04 10:37)
【技术支持|常见问题】你正确使用https了吗? [php源码](2022-11-04 10:37)
【技术支持|常见问题】安全超文本传输协议 {源码分享}(2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部