备战青训营笔试——前端选择题(上)
前言
青训营笔试将至,希望能通过写文章的方式,和大家一起复习相关知识点,备战笔试。
本人前端菜鸡,希望大家多多指教。后续我也会推出选择题下部分和每天的编程题(赶得完的话)。最后呢,祝大家都能顺顺利利地通过笔试。
DAY 1
- 下列哪些是 HTML5 的新特性?
A. 语义标签
B. Canvas 绘图
C. <audio>元素
D. 增强型表单 - 下面可以继承的属性有哪些?
A. font-size
B. background
C. color
D. cursor
根据W3school的描述
HTML5 的一些最有趣的新特性:
- 新的语义元素,比如 <header>, <footer>, <article>, and <section>。
- 新的表单控件,比如数字、日期、时间、日历和滑块。
- 强大的图像支持(借由 <canvas> 和 <svg>)
- 强大的多媒体支持(借由 <video> 和 <audio>)
- 强大的新 API,比如用本地存储取代 cookie。
可知第一题选ABCD。更多关于html5的知识请点击W3school
第二题,嗯,本人学疏才浅,放个链接大家一起学习吧
所以,第二题选ACD。
DAY 2
-
对于一条100M的宽带,理论下载速度上限是多少?
A. 12.5MB/s
B. 100MB/s
C. 10MB/s
D. 10Mb/s -
关于 for of 和 for in 的描述,正确的是?
A. for in 可以循环普通对象
B. for of 可以循环普通对象
C. 都不可以循环数组
D. 都可以循环数组
熟悉宽带的同学都应该知道宽带速率的单位是Mbps,指每秒传输的位(比特)数量。而我们常说的网速都是以MB/s 为单位,MB/s的含义是兆字节每秒。结合计算机知识,1Byte=8bit,大写B是小写b的8倍。所以100/8=12.5,第一题选A。
对于第二题(选AD),首先,for of是ES6 引入的,参考阮一峰的《ECMAScript 6 入门》
ES6 借鉴 C++、Java、C# 和 Python 语言,引入了
for...of循环,作为遍历所有数据结构的统一的方法。一个数据结构只要部署了
Symbol.iterator属性,就被视为具有 iterator 接口,就可以用for...of循环遍历它的成员。也就是说,for...of循环内部调用的是数据结构的Symbol.iterator方法。
for...of循环可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象(比如arguments对象、DOM NodeList 对象)、后文的 Generator 对象,以及字符串。
所以说for of是不能遍历普通对象的(除非它署了Symbol.iterator属性)
另外,for in是JavaScript原有的遍历方法,遍历对象的“可枚举”属性
两者区别:
for in遍历的是数组的索引(即键名),而for of遍历的是数组元素值。
for in总是得到对象的key或数组、字符串的下标。
for of总是得到对象的value或数组、字符串的值,另外还可以用于遍历Map和Set。
示例代码
var arr = ['a', 'b', 'c', 'd'];
for (let a in arr) {
console.log(a); // 0 1 2 3
}
for (let a of arr) {
console.log(a); // a b c d
}
forEach也是一种常用的遍历方法:
const arr = ['apple', 'peach', 'orange'];
arr.forEach(function (element, index) {
console.log(element); // apple peach orange
console.log(index); // 0 1 2
});
DAY 3
-
关于事件冒泡描述正确的是?
A. 从目标元素向 document 冒泡
B. 从 document 向目标元素冒泡
C. 从 document 向目标元素冒泡,再从目标元素向 document 冒泡
D. 以上都不是 -
以下哪些 script 标签属性会使脚本有可能在 DOMContentLoaded 事件之后加载?
A. <script async>
B. <script defer>
C. <script type="module">
D. <script type="module" async>
对于事件冒泡,“冒泡”这词就形象地表明它是从里到外的。事件冒泡的详细介绍如下:
在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)。
所以第一题选A。
第二题,对于DOMContentLoaded事件,MDN是这样解释的:
当初始的 HTML 文档被完全加载和解析完成之后,
DOMContentLoaded 事件被触发,而无需等待样式表、图像和子框架的完全加载。
简单来说,DOMContentLoaded 就是浏览器已完全加载 HTML,并构建了 DOM 树,而样式表之类的东西可能尚未加载完成。
JS 的加载分为两个部分:下载和执行。它会阻止页面的渲染,为了解决这个问题,ECMAScript 引入了 defer 和 async 两个属性。
MDN中明确defer属性会令脚本在文档解析完成后、触发 DOMContentLoaded 事件前执行。
这个布尔属性被设定用来通知浏览器该脚本将在文档完成解析后,触发
DOMContentLoaded 事件前执行。 有defer 属性的脚本会阻止DOMContentLoaded 事件,直到脚本被加载并且解析完成。
而async 属性会在 HTML 解析期间异步下载文件,并在完成下载后立即暂停 HTML 解析器去执行 script 中的代码。但如果在下载脚本的期间HTML加载完成了,就有可能在DOMContentLoaded 事件之后加载。
所以,这题选带有async的AD。
参考:
DAY 4
- 以下哪些是 CSS 块级元素的特性?
A. 宽度默认由其中的内容决定
B. 高度默认由其中的内容决定
C. 可以被分拆到多行
D. 可以通过 height 属性指定高度 - 以下关于跨域说法错误的是?
A.example.com 和
example.com 是相同的域名,属于同源
B. 跨域资源共享规范中规定了除了 GET 之外的 HTTP 请求,或者搭配某些 MINE 类型的 POST 请求,浏览器都需要先发一个 OPTIONS 请求。
C. CSS 中通过 @font-face 使用字体也会有跨域问题
D. Cookie,LocalStorage 和 IndexedDB 都会受到同源策略的限制
第一题考的是块级元素,先复习一下:
块级元素:
- 比如div;p;h系列
- 独占一行
- 支持width、height、边距(margin、padding)属性
- 宽度默认所在容器的宽度
支持height属性,所以说D是对的。了解高度塌陷就不难知道块级元素的高度默认由其中的内容决定。答案:BD
补充:
行内元素(内联元素):
- 如a;img;span
- 与其他行内元素并排
- 不支持width、height、边距(margin、padding)属性
- 默认的宽度就是文本内容的宽度
- 只能容纳文本级元素和内联元素
- 浮动后变为块级
行内/块级转换
display属性
3个值:inline、block、inline-block(行内块元素)。
浮动float属性
3个值:left、right、none
浮动会改变display的值为block(块级元素)
第二题选A放链接大家一起学习:
DAY 5
- 下列哪些可以实现浏览器存储数据?
A. cookie
B. localStorage
C. session
D. sessionStorage - 对以下代码说法正确的是?
let arr = [1,2,3,4,5];
let arr2 = [1, , 3];
A. 执行 arr.length = 3,此时数组为 [1,2,3]
B. 执行 arr[10] = 11,此时 arr.length 为 6
C. 执行 delete arr[2],此时 arr.length 为 4,数组为 [1,2,4,5]
D. arr2.length 的长度为 2
第一题,cookie不用说,老牌的存储型缓存。后来HTML5推出了WebStorage浏览器存储机制,其又分为sessionStorage和localStorage,选ABD。
第二题考察的是数组的length属性,翻阅《JavaScript权威指南(原书第7版)》可知:
- 设置数组的length值为小于当前值的非负整数n,则任何索引大于或等于n的数组元素都会从数组中被删除
- 如果给一个索引为
i的数组元素赋值,而i大于或等于数组当前的length,则数组的length属性会被设 置为i+1 - 对数组元素使用delete操作符不会修改length属性,使用
splice()会 - 如果省略数组字面量中的一个值,被省略的元素是不存在的,但它的索引是存在的
所以这题选A