11 01 月 2019 JavaScript 中如何对比两个对象? 2019-01-11 回答使用==或===对两个不同却具有相同属性及属性值的对象进行比较,他们的结果却不会相等。这是因为等号比较的是他们的引用(内存地址),而不是基本类型。为了测试两个对象在结构上是否相等,需要一个辅助函数。他将遍历每个对象的所有属性,然后测试他们是否具有相同的值,嵌套对象也需如此。当然,也可以使用参数来控制是否对原型链进行比较。注意:此代码只对普通对象、数组、函数、日期和基本类型的数
10 01 月 2019 如何克隆一个 JavaScript 对象? 2019-01-10 回答使用扩展运算符...可将对象自身的枚举属性复制到新对象中。但这只能进行浅拷贝,如:constobj={a:1,b:2}constshallowClone={...obj}使用这种技术将会忽略原型链。此外,嵌套对象并不会被克隆,只是复制了他们的引用,因此浅拷贝后嵌套对象和原始对象仍然指向同一个对象。加分回答克隆还可以使用以下几种方法:JSON.parse(JSON.string
09 01 月 2019 请举例说明什么是回调? 2019-01-09 回答回调函数作为实参传入另一个函数内,当某种事件被触发或某些任务被完成时会在外部函数内被调用,通常用于异步编程。由于回调函数会被后来的代码所调用,因此在初始化的时候应注意先声明但不调用。当特定的事件发生时,事件监听器的异步回调才会被执行。如:document.addEventListener("click",()=>{console.log("Theuserclickedonth
08 01 月 2019 实现一个功能和 `Function.prototype.bind` 相同的函数 2019-01-08 题目/**请按要求实现 `bind` 函数:以下代码执行时,需返回正确结果且运行过程中无异常*/letexample=function(){console.log(this)}constboundExample=bind(example,{a:true})boundExample.call({b:true})//{a:true}回答 bind 需接受两个参数:函数和上下文 bind 需创建一
07 01 月 2019 根据食谱和已有食材计算可烹饪的最大次数 2019-01-07 题目/**请按要求实现 `batches(recipe,available)` 函数:1.含有 2 个参数,第一个为食谱对象,第二个为已有食材对象 2.返回可烹饪的最大次数 3.以下代码执行时,需返回正确结果且运行过程中无异常*///return0batches({milk:100,butter:50,flour:5},{milk:132,butter:48,flour:51})batche
07 01 月 2019 `Promise` 有哪些状态? 2019-01-06 回答 Promise 对象用于表示一个异步操作的最终状态(完成或失败)及其返回值。他有以下几种状态:pending:初始状态,完成或失败状态的前一个状态 fulfilled:操作成功完成 rejected:操作失败 pending 状态的 Promise 对象会触发 fulfilled/rejected 状态,在其状态处理方法中可以传入参数/失败信息。当操作成功完成时,Promise 对象的 then 方
05 01 月 2019 后置递增 `i++` 和前置递增 `++i` 操作有什么区别? 2019-01-05 回答他们都会使变量增加 1,只是计算和赋值的顺序不一样。后置递增是先赋值后计算,如:leti=1;console.log(i);//输出 1leta=i++;console.log(i);//输出 2console.log(a);//输出 1 前置递增是先计算后赋值,如:leti=1;console.log(i);//输出 1leta=++i;console.log(i);//输出 2cons
04 01 月 2019 等于操作符 `==` 和 `===` 有什么区别 2019-01-04 回答三个等号===表示严格相等,也就是说类型和值都必须相同。两个等号==会使其中一边的类型进行强制转换,使等号两边的类型都相等后再对数值进行比较。加分回答尽量使用全等操作符。因为其没有隐式转换,这样结果会比较容易预测、计算也会比较快除了等于操作符,还可以使用 Object.is 进行同值比较。他有着自己的特殊用途,不应说他更宽松或更严格于其他等于操作符附表一张 xy=====Objec
03 01 月 2019 CSS 优先级是如何计算的? 2019-01-03 回答浏览器通过优先级权重来判断 CSS 属性值与元素之间的关系:权重越高关系越密切,高权重的 CSS 属性值就会赋予到元素上。我们可以把 CSS 分为四类,每类的矩阵权重从高到底排列如下:内联样式(如:style="font-weight:bold"):[1,0,0,0]ID 选择器(如:#comments):[0,1,0,0]类选择器(如:.footer),属性选择器(如:[src$=".p
02 01 月 2019 `+` 和 `~` 选择器有什么区别? 2019-01-02 回答毗邻兄弟选择器 + 可以选择紧随元素后的所有同级元素。如:div~p 可以选择紧随 div 元素后且与其同级的 p 元素。一般兄弟选择器~可选择元素后的所有同级元素。如:p~span 将会匹配同一父元素下,p 元素后的所有 span 元素。加分回答基本元素选择器*:通用元素选择器,匹配任何元素.footer:匹配 class="footer"的所有元素#comments:匹配 id="comments
01 01 月 2019 CSS sprites 的优点及如何使用? 2019-01-01 回答 CSSsprites 将多张图片合并为一张图片,从而减少浏览器对 HTTP 的请求数量,进而减少网页的加载时间。即使在 HTTP/2 协议下,这依旧可以减少网页的加载时间。在 HTTP/1.1 中,每个 TCP 连接只允许一个请求。现代浏览器虽然可以打开多个(2-8)并行的 TCP 连接,但连接数量依旧有限。HTTP/2 允许浏览器和服务器之间的多个请求在一个 TCP 连接上进行复用。这意味着 TCP 连接
31 12 月 2018 `em` 和 `rem` 有什么区别? 2018-12-31 回答 em 和 rem 都是基于 font-size 的 CSS 属性。唯一的区别是他们继承的对象不同。em 继承父元素中的 font-sizerem 继承根元素(html)中的 font-size 在大多数浏览器中,根元素的 font-size 默认值为 16px 加分回答其他单位 vh 和 vw:窗口高度或宽度的 1/100。可脱离父元素的继承规则,如:窗口高 900px,父元素高 1200px,1vh 为 9px。vmin
31 12 月 2018 focus 有什么效果?应该怎么正确处理他们? 2018-12-30 回答像按钮或锚点标记等元素被选中时,该元素的外围就会出现轮廓。不同浏览器会呈现不同的效果,但一般是在元素周围显示蓝色的轮廓来表示他已经被选中。过去,很多人使用 outline:0 来移除元素被选中的效果。但是,这会让键盘侠们感到很不友好,因为选中效果被移除了。但是如果不移除的话,元素外围的蓝色轮廓有时候会让大多数人感觉不够舒适美观。Bootstrap 等 UI 框架一般采用更加美观的 box
29 12 月 2018 描述 CSS 盒子模型布局并简要描述其每一个部分 2018-12-29 回答 CSS 盒子模型(BoxModel)布局包含内容(content)、内边距(padding)、边框(border)、外边距(margin)四个部分。content:盒子内部填充元素内容(例如文本、图像或视频播放器等)的区域。他的大小为 content-box 的宽和高。相关 CSS 属性为 width,min-width,max-width,height,min-height,max-h
28 12 月 2018 简述一下 `@media` 的媒体类型 2018-12-28 回答@media 是可根据一个或多个基于媒体特征、媒体类型等条件来使用样式的规则。其包含以下四种媒体类型:all:适用于所有设备,默认选项 print:仅适用于打印设备 screen:仅适用于台式机、平板电脑、手机等屏幕 speech:仅适用于屏幕阅读器加分回答其余的媒体类型:tty,tv,projection,handheld,braille,embossed,aural 在 MediaQ
27 12 月 2018 使用 flexbox,创建一个 3 列布局,其中每列占据容器的 col-{n} / 12 比率 2018-12-27 回答设置父容器为 display:flex,然后使用 flex 为每列提供与其比值相对应的 flex-grow 值。<stylelang="scss">.row{display:flex;&__col{...&--2{flex:2}&--7{flex:7}&--3{flex:3}}}</style><divclass="row"><divclass="row__colrow__col--2
26 12 月 2018 CSS 预处理器有什么优势? 2018-12-26 回答 CSS 预处理器添加了一些实用的原生 CSS 没有的的功能,并且他通过使用 DRY(Don'tRepeatYourself)原则使生成的 CSS 更加整洁和易于维护。他通过简洁的嵌套选择器语法减少了大量重复代码。变量、颜色函数(lighten,darken,transparentize 等)等附属工具,mixins 及循环使得 CSS 更像一个真正的编程语言,这使开发者编写复杂的 CSS 更加容易了
25 12 月 2018 介绍一下 CSS 的 BEM 2018-12-25 回答 BEM(Block,Element,Modifier)是一种基于组件的对 CSS 类名进行约定的 Web 开发方法。他通过定义命名空间来解决权重问题,从而使 CSS 更易于维护。BEM 使用 Block、Element、Modifier 来解释其结构。Block 是一个可跨项目重用的独立组件,且是子组件(Element)的“命名空间”。Modifier 可标示 Block 或 Element 处于某种状态
24 12 月 2018 什么是 HTML5 存储?解释一下 `localStorage` 和 `sessionStorage` 2018-12-24 回答在 HTML5 中,页面可以在用户的浏览器中存储本地数据。这些数据以 name/value 的格式进行存储,且只能被存储该数据的网页访问。在 localStorage 和 sessionStorage 中存在生命周期的差异。通过 localStorage 存储的数据是持久化的:他不会过期,可以一直存储在用户的电脑上,除非 web 应用程序删除他或用户使用了浏览器中相关的缓存清除功能。sessionS
23 12 月 2018 `rel="noopener"` 应在什么场景下使用,为什么? 2018-12-23 回答 rel="noopener"是 <a> 超链接标签的一个属性。他可以禁止打开的新页面中使用 window.opener 属性,这样一来打开的新页面就不能通过 window.opener 去操作你的页面。因此 rel="noopener"应在打开新页面的场景下使用,否则就会导致严重的安全漏洞。如新页面可以通过 window.opener.location=newURL 将你的页面导航至任何网址。