前端面试知识简单学习
HTML 属于结构层,负责描绘出内容的结构。
CSS 属于表示层,负责如何显示有关内容。
JavaScript 属于行为层,负责内容应如何对事件做出反应。
HTML5 新标签
HTML5 中新增标签大致有:<header>、<footer>、<aside>、<nav>、<video>、<audio>、<canvas>等等。
常见浏览器及其内核
国内一些浏览器使用较多的是 Webkit 内核。
针对不同浏览器内核,HTML 辨别:
- IE 内核浏览器识别:<!--[if IE]><![endif]-->
- 非 IE 内核浏览器识别:<!--[if !IE]><![endif]-->
针对不同浏览器内核,CSS 辨别:
/* 设置文字不可选取 */ * { -moz-user-select: none; /* 火狐 浏览器 */ -webkit-user-select: none; /* Webkit 浏览器 */ -o-user-select: none; /* Opera 浏览器 */ -ms-user-select: none; /* IE10 浏览器 */ -khtml-user-select: none; /* 早期浏览器 */ user-select: none; /* 默认 */ }
cookies、session、sessionStorage、localStorage
- cookies:存储于浏览器端的数据。可以设置 cookies 的到期时间,如果不设置时间,则在浏览器关闭窗口的时候会消失。
- session:存储于服务器端的数据。session 存储特定用户会话所需的属性和配置信息。
- cookies 和 session 的区别在于:
- cookies 数据存放在客户的浏览器上,session 数据存放在服务器上。
- 前端都是裸君子,没有安全可言,cookies 可能会被黑客利用作数据欺骗。所以重要信息记得存 session。
- session 如果在生效期内量过大,会占用服务器性能。
- 单个 cookies 保存的数据不能超过 4 K,很多浏览器限制一个站点保存最多 20 个 cookies。
- sessionStorage:生命周期存在于标签页或窗口,用于本地存储一个会话(session)中的数据,这些数据会随着窗口或者标签页的关闭而被清空。
- localStorage:生命周期是永久的,除非用户主动清除浏览器上存储的 localStorage 信息,否则它将会永久存在。
- sessionStorage 和 localStorage 操作方法:setItem、getItem 以及 removeItem。
以 localStorage 为例:
localStorage.getItem('name'); // 获取 name 的值 localStorage.setItem('name', 'jsliang'); // 设置 name 的值为 jsliang localStorage.removeItem('name'); // 删除 name 的值
CSS 盒模型
在工作的过程中,也许小伙伴需要 div 块的总宽度为 100px,然后发现总是被 margin 撑高,这是因为盒模型定义的问题:
CSS 中有个属性叫 box-sizing。
box-sizing: border-box box-sizing: content-box
- border-box 中,整个 div 的宽、高,包括 margin、padding、border。
- content-box 中,整个 div 的宽、高,则不包括上面元素。
如上图,如果一个 div ,你的代码如下:
div { box-sizing: border-box; margin: 10px; width: 100px; height: 100px; padding: 10px; }
那么,你的整个宽高还是 100px。
但是,如果你的代码如下:
div { box-sizing: content-box; margin: 10px; width: 100px; height: 100px; padding: 10px; }
那么,你的整个盒子宽高是 120px。
如果你在设计页面中,发现内容区被撑爆了,那么,请检查下现在的 border-box 是什么,最好在引用 reset.css 的时候,就对 border-box 进行统一设置,方便管理。
CSS 单位
在 CSS 中,除了我们常用的 px,还有其他单位小伙伴们可以了解一下:
CSS 选择器
选择器是匹配元素的一种模式。
- 关于 CSS 解析器:
HTML 经过解析生成 DOM Tree;而在 CSS 解析完毕后,需要将解析的结果与 DOM Tree 的内容一起进行分析建立一棵 Render Tree,最终用来进行绘图。
Render Tree 中的元素与 DOM 元素相对应,但非一一对应:一个 DOM 元素可能会对应多个 renderer,如文本折行后,不同的「行」会成为 render tree 种不同的 renderer。也有的 DOM 元素被 Render Tree 完全无视,比如 display:none 的元素。
在建立 Render Tree 时,浏览器就要为每个 DOM Tree 中的元素根据 CSS 的解析结果来确定生成怎样的 renderer。对于每个 DOM 元素,必须在所有 Style Rules 中找到符合的 selector 并将对应的规则进行合并。选择器的「解析」实际是在这里执行的,在遍历 DOM Tree 时,从 Style Rules 中去寻找对应的 selector。
- CSS 解析顺序
在 CSS 的选择器中,它会按照优先级 从右向左解析,因为这样匹配元素的时候,能尽量少地查找,所以选择器最好写地简洁一点。
- CSS 常用选择器
- 通配符:*
- ID 选择器:#ID
- 类选择器:.class
- 元素选择器:p、a 等……
- 后代选择器:p span、div a 等……
- 伪类选择器:a:hover 等……
- 属性选择器:input[type="text"] 等……
- 子元素选择器:li:firth-child、p:nth-child(1) 等……
- CSS 选择器权重
!important -> 行内样式 -> #id -> .class -> 元素和伪元素 -> * -> 继承 -> 默认
CSS3 新特性
经典:CSS3 相关属性你了解吗,说说都有哪些?能说说你工作中常用的一些 CSS3 属性吗?
那么,CSS3 新特性都有哪些呢?
- transition:过渡
- transform:旋转、缩放、移动或者倾斜
- animation:动画
- gradient:渐变
- shadow:阴影
- border-radius:圆角
行内元素和块级元素
行内元素:宽度和高度由内容决定,与其他元素共占一行的元素,我们将其叫行内元素。例如:<span>、<i>、<a> 等……
块级元素:默认宽度由父容器决定,默认高度由内容决定,独占一行并且可以设置宽高的元素,我们将其叫做块级元素。例如:<p>、<div>、<ul> 等……
在日常开发中,我们经常使用 CSS 的 display 属性来打破两者的壁垒:display: inline-block,使它们拥有更多的状态。
水平居中:
- 行内元素:display: inline-block; text-align: center;
- 块级元素:margin: 0 auto;
- Flex:display: flex; justify-content: center;
垂直居中:
- 行高 = 元素高:line-height: height
- Flex:display: flex; align-items: center;
原型与原型链
作用域和闭包
异步和同步
- 首先我们尝试使用递归去解决深拷贝:
- 使用 JSON 对象的 parse 和 stringify
- 防抖与节流
- 重绘与回流
- 浏览器解析 URL
- DNS 域名解析
- TCP 三次握手与四次挥手
- 浏览器渲染页面
- ES6
- 说说 let、var、const 区别
-
- 讲讲 Promise 及其使
数组操作
在 JavaScript 中,用得较多的之一无疑是数组操作,这里过一遍数组的一些用法:
- map: 遍历数组,返回回调返回值组成的新数组
- forEach: 无法break,可以用try/catch中throw new Error来停止
- filter: 过滤
- some: 有一项返回true,则整体为true
- every: 有一项返回false,则整体为false
- join: 通过指定连接符生成字符串
- push / pop: 末尾推入和弹出,改变原数组, 返回推入/弹出项
- unshift / shift: 头部推入和弹出,改变原数组,返回操作项
- sort(fn) / reverse: 排序与反转,改变原数组
- concat: 连接数组,不影响原数组, 浅拷贝
- slice(start, end): 返回截断后的新数组,不改变原数组
- splice(start, number, value...): 返回删除元素组成的数组,value 为插入项,改变原数组
- indexOf / lastIndexOf(value, fromIndex): 查找数组项,返回对应的下标
- reduce / reduceRight(fn(prev, cur), defaultPrev): 两两执行,prev 为上次化简函数的return值,cur 为当前值(从第二项开始)
原文链接:https://juejin.im/post/5c8e4cd3f265da67c87454a0