文章来源于https://juejin.im/post/5bee888fe51d4557fe34e356,感谢原文做者的分享。另推荐一篇文章:[前端技术清单]css
本部分主要从如下几个方面来回顾前端相关的基础知识:html
<meta charset=’utf-8′> 声明文档使用的字符编码
<meta http-equiv=”X-UA-Compatible” content=”IE=edge,chrome=1″/> 优先使用 IE 最新版本和 Chrome
<meta name=”description” content=”不超过150个字符”/> 页面描述
<meta name=”keywords” content=””/> 页面关键词
<meta name=”author” content=”name, email@gmail.com”/> 网页做者
<meta name=”robots” content=”index,follow”/> 搜索引擎抓取
<meta name=”viewport” content=”initial-scale=1, maximum-scale=3, minimum-scale=1, user-scalable=no”> 为移动设备添加 viewport
<meta name=”apple-mobile-web-app-title” content=”标题”> iOS 设备 begin <meta name=”apple-mobile-web-app-capable” content=”yes”/> 添加到主屏后的标题(iOS 6 新增) 是否启用 WebApp 全屏模式,删除苹果默认的工具栏和菜单栏
<meta name=”apple-itunes-app” content=”app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL”> 添加智能 App 广告条 Smart App Banner(iOS 6+ Safari)
<meta name=”apple-mobile-web-app-status-bar-style” content=”black”/>
<meta name=”format-detection” content=”telphone=no, email=no”/> 设置苹果工具栏颜色
<meta name=”renderer” content=”webkit”> 启用360浏览器的极速模式(webkit)
<meta http-equiv=”X-UA-Compatible” content=”IE=edge”> 避免IE使用兼容模式
<meta http-equiv=”Cache-Control” content=”no-siteapp” /> 不让百度转码
<meta name=”HandheldFriendly” content=”true”> 针对手持设备优化,主要是针对一些老的不识别viewport的浏览器,好比黑莓
<meta name=”MobileOptimized” content=”320″> 微软的老式浏览器
<meta name=”screen-orientation” content=”portrait”> uc强制竖屏
<meta name=”x5-orientation” content=”portrait”> QQ强制竖屏
<meta name=”full-screen” content=”yes”> UC强制全屏
<meta name=”x5-fullscreen” content=”true”> QQ强制全屏
<meta name=”browsermode” content=”application”> UC应用模式
<meta name=”x5-page-mode” content=”app”> QQ应用模式
<meta name=”msapplication-tap-highlight” content=”no”> windows phone 点击无高光 设置页面不缓存
<meta http-equiv=”pragma” content=”no-cache”><meta http-equiv=”cache-control” content=”no-cache”><meta http-equiv=”expires” content=”0″>复制代码
①ie盒模型算上border、padding及自身(不算margin),标准的只算上自身窗体的大小 css设置方法以下:
前端
/* 标准模型 */vue
box-sizing:content-box;html5
/*IE模型*/ react
box-sizing:border-box;
webpack
②几种得到宽高的方式
css3
dom.style.width/height
es6
这种方式只能取到dom元素内联样式所设置的宽高,也就是说若是该节点的样式是在style标签中或外联的CSS文件中设置的话,经过这种方法是获取不到dom的宽高的
web
dom.currentStyle.width/height
这种方式获取的是在页面渲染完成后的结果,就是说无论是哪一种方式设置的样式,都能获取到。但这种方式只有IE浏览器支持。
window.getComputedStyle(dom).width/height
这种方式的原理和2是同样的,这个能够兼容更多的浏览器,通用性好一些。
dom.getBoundingClientRect().width/height
这种方式是根据元素在视窗中的绝对位置来获取宽高的。
dom.offsetWidth/offsetHeight
这个就没什么好说的了,最经常使用的,也是兼容最好的
{clear:both;height:0;overflow:hidden;}
content:"."; clear:both;
display:block; height:0;
overflow:hidden;
visibility:hidden;
}
.float_div{
zoom:1
}
height: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-top: 50px solid transparent;
border-bottom: 50px solid blue;
background: white;
}
2.(function(){...}()) (function(x){ console.log(x); }(12345))
做用 不破坏污染全局的命名空间,若须要使用,将其用变量传入如 (function(window){...}(window)
ES7 提出的async 函数,终于让 JavaScript 对于异步操做有了终极解决方案。No more callback hell。 async 函数是 Generator 函数的语法糖。使用 关键字 async 来表示,在函数内部使用 await 来表示异步。 想较于 Generator,Async 函数的改进在于下面四点:
下面是使用示例:
const makeRequest = () => {
return getJSON() .then(data => {
if (data.needsAnotherRequest) {
return makeAnotherRequest(data) .then(moreData => {
console.log(moreData) return moreData })
} else {
console.log(data) return data } })
} async/await示例 const makeRequest = async () => {
const data = await getJSON() if (data.needsAnotherRequest) { const moreData = await makeAnotherRequest(data); console.log(moreData) return moreData
} else {
console.log(data) return data
}
}
3开头 (请求被重定向)表示要完成请求,须要进一步操做。 一般,这些状态代码用来重定向。
①建立新节点
createDocumentFragment //建立新DOM片断
createElement //建立一个元素
createTextNode //建立一个文本节点
②添加 移除 替换 插入
appendChild() //添加
removeChild //移除
replaceChild //替换
insertBofore //插入
③查找
getElementsByTagName() //经过标签名查找
getElementsByName() //经过元素的name属性查找
getElementById() //经过元素的id查找
querySelectorAll()和querySelector()复制代码
定义和用法: 一个父函数里面包含了一个子函数,子函数调用了父函数内部的变量,若是子函数在外部被调用,就产生了闭包。简单的说,闭包就是可以读取其余函数内部变量的函数。
闭包的做用:
①读取其余函数内部的变量
②变量保存在内存中
注意: 使用过多的闭包会消耗大量内存,形成网页的性能问题,能够在函数执行完成以前把不须要的局部变量删除。
①数据存储大小 cookie:4kb webStorge:5mb
②数据存储有效期限 cookie:根据本身的设置时间 sessionStorage:关闭窗口后失效
localStorage:永久有效除非js删除或者浏览器删除 ③做用域 cookie和localStorage是在同源窗口,同一个浏览器共享的,sessionStorage只在同一个标签页共享。
ready:页面的文档结构加载完成,不包括图片视频等非文字内容。 load:全部页面元素都加载完成 ready的速度比load快
①资源文件js css 图片合并压缩
②减小页面dom操做,操做多的话能够考虑使用虚拟dom
③减小http请求
④使用cdn加速 cdn的做用:cdn能够处理整个网站 70%-95%的访问量,从而解决网站的并发量,简单的说就是经过在不一样地点缓存内容,而后经过负载平衡等技术将用户请求定向到最近的缓存服务器上获取内容,提升用户访问网站的响应速度。
⑤减小cookie大小
①浏览器根据请求的URL,交给DNS域名解析,找到真实的ip,交给域名解析。
②服务器交给后端处理完成后返回的数据,浏览器接收文件HTML,CSS,JS图片等。
③浏览器对加载的资源进行语法解析,创建相应的数据内部结构。
④解析html,建立dom树,自上而下的顺序
⑤解析css,优先级:浏览器默认设置<用户设置<外部样式<内联样式<HTML中的style样式;
⑥将css与dom合并,构建渲染树
⑦布局重绘重排,页面完成渲染。
主要分为渲染引擎和js引擎 渲染引擎:主要负责取得网页的(html,xml,图片等),整理信息结合css渲染页面,计算网页的显示方式,浏览器内核的不一样对网页的语法解释也会有所不一样,因此渲染效果也会有所不一样,这也是咱们须要作兼容性处理的缘由。
js引擎:解析和执行js来达到网页的动态交互效果。
新增了 canvas,video,audio,nav,section,footer,header等元素。 表单控件,calendar、date、time、email、url、search 存储技术:localStorage,sessionStorage等 新的技术:webworker, websocket, Geolocation
②搜索引擎不可以解读 iframe 页面,不利于 seo
③iframe和主页面共享链接池,然而浏览器对相同域的连接是有限制的,因此这会影响页面的并行加载。
④若是想要绕开以上的2个问题,能够考虑经过js动态复职给 iframe添加src值。
标签闭合,标签小写,不乱嵌套,使用外链形式的css和js,结构层,表现层,行为层分离。
TML与XHTML之间的差异,主要分为功能上的差异和书写习惯的差异两方面。
关于功能上的差异,主要是XHTML可兼容各大浏览器、手机以及PDA,而且浏览器也能快速正确地编译网页。
因为XHTML的语法较为严谨,因此若是你是习惯松散结构的HTML编写者,那须要注意XHTML的规则。
Doctype处于文档的最前面,用来告诉浏览器的解析器,文档的类型。 严格模式的js运行和排版是按照浏览器支持的最高标准的。 混杂模式就是兼容性模式,当页面兼容很差的时候,就能够选用这种模式,防止页面布局错落没法站点工做。
行内元素:a b span img input select strong 块级元素:div ul li ol dl dt dd h1 h2 h3 p 空元素:br hr link meta 块级元素独占一行,行内元素合一并行一行
class:为元素设置类标识 data-**:为元素添加自定义属性 draggable:设置元素是否能够拖曳 id:元素的id,同一个id文档内是惟一的 style:元素样式 title:鼠标上移显示信息
svg绘制出来的图片有独立dom节点,能够绑定事件,是矢量图,放大图片不会有锯齿。 canvas绘制出来的图片是一个画布,等于就是一张图,放大会产生锯齿。
就是将多个小图标拼接在一张图片上,减小对图片的请求,使用 background-size来定位到相关图片上。
优势: ①减小HTTP请求数,极大地提升页面加载速度; ②增长图片信息重复度,提升压缩比,减小图片大小; ③更换风格方便,只需在一张或几张图片上修改颜色或样式便可实现;
缺点: ①图片合并麻烦; ②维护麻烦,修改一个图片可能须要重新布局整个图片,样式;
总的来讲,他们的做用都是让元素不可见。区别在于: display:none会让元素彻底从 dom 树中消失,渲染的时候不占据任何空间。 visibility:hidden不会让元素从渲染树 dom 中消失,并且仍是会占据必定的空间,只是内容不可见而已。
1.link是html 的方式,@import是css的方式 2.link最大限度支持并行下载,@import过多嵌套致使串行下载 3.link能够经过rel="alternate stylesheet"指定候选样式 4.整体来讲:link优于@import
1.clear:both,添加一个空标签div 2.父级div定义伪类:after和zoom 3.父级div定义overflow:hidden 4.父级div也浮动,须要定义宽度 5.结尾处加br标签clear:both
例如:
.clearfix:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}
.clearfix{display:inline-table}
.clearfix{height:1%}
.clearfix{display:block;*zoom:1}复制代码
由于浏览器的兼容问题,不一样浏览器对有些标签的默认值是不一样的,若是没对CSS初始化每每会出现浏览器之间的页面显示差别。 固然,初始化样式会对SEO有必定的影响,但鱼和熊掌不可兼得,但力求影响最小的状况下初始化。
主要的新特性有:
有两种, IE盒子模型、W3C盒子模型; 盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border); 区 别: IE(低版本)的content部分把 border 和 padding计算了进去;
优先级为: !important > id > class > tag 且important 比 内联优先级高。
优势:能够将二进制数据转化为可打印字符,方便传输数据,对数据进行简单的加密,肉眼安全。 缺点:内容编码后体积变大,编码和解码须要CPU额外工做量。
做用域链中的变量都是向上访问的,变量访问到windows对象后终止,向下访问是不容许的。 简单的说,做用域就是变量函数的可访问范围。
每一个对象在内部都是会初始化一个属性的,prototype(原型),当咱们访问一个对象的属性时,若是这个对象不存在这个属性,那么他就会去 prototype中查找,而后 prototype中还有本身的 prototype,就这样一直找下去,这就是原型链的概念。
假如咱们有一个 ul 列表,里面有4个li,咱们能够在 li 上绑定 click 事件,可是也能够在她们的 父节点 ul上绑定,这种在 父节点上绑定事件来代替子节点事件的方法,就叫作事件委托。
this老是指向函数的直接调用者(而非间接调用者) 若是有new关键字,this指向new出来的那个对象 在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent中的this老是指向全局对象Window
w3c中定义的事件发生的过程的3个阶段: 捕获阶段(capturing)、目标阶段(targetin)、冒泡阶段(bubbling)
优势: 经过异步模式,提高了用户体验. 优化了浏览器和服务器之间的传输,减小没必要要的数据往返,减小了带宽占用. Ajax在客户端运行,承担了一部分原本由服务器承担的工做,减小了大用户量下的服务器负载。 Ajax能够实现动态不刷新(局部刷新)
缺点: 安全问题 AJAX暴露了与服务器交互的细节。 对搜索引擎的支持比较弱。 不容易调试。
跨域问题能够从jsonp、 iframe、window.name、window.postMessage、服务器上设置代理页面等方面来解决。通常由后台设置容许跨域。
内存泄漏是指 一些对象咱们不在使用它的时候,他任然存在 setTimeout 的第一个参数使用字符串而非函数的话,会引起内存泄漏 闭包使用不当。
1、Angular特性: 由本身实现一套模板编译规则,数据变化依赖脏检查, 基本属性包括:数据双向绑定、基本模板指令、自定义指令、表单验证、路由操做、依赖注入、过滤器、内置服务、自定义服务、组件、模块。 运行效率较低,数据变动检测方式。 学习angular会迫使你学习特有的预发,上手成本很大,代码看起来很干净 依赖注入,即一个对象将依赖项提供给另外一个对象(客户端)的模式。致使更多的灵活性和更干净的代码。 Angular 最适合单页应用(SPA),由于它可能太臃肿而不能用于微服务。 框架比较臃肿,每次用啥功能要引入一大堆东西 Angular错误提示不够清晰明显,对于初级开发者,很难看懂Angular的错误提示。(我的认为这是最大的很差之处,当初学习这个遇到不少坑啊),并且定位bug很难。 面向对象编程的思想,Angular由后端开发人员设计的前端框架。 详细比较:React和Vue的区别
2、React特性: 单向绑定,先更新model,而后渲染UI元素,数据在一个方向流动,使得调试更加容易。代码冗余,各类生命周期太麻烦,刚开始接触好难记。 用了虚拟DOM。(对虚拟DOM的理解刚开始我不是很理解概念,建议你们去看【深刻REACT技术栈】这本书有很好的讲解) 更适合大型应用和更好的可测试性 Web端和移动端原生APP通吃 更大的生态系统,更多的支持和好用的工具
3、Vue特性 模板和渲染函数的弹性选择 简单的语法和项目配置 更快的渲染速度和更小的体积四
它的功能是把对应的字符串解析成JS代码并运行 应该避免使用eval,不安全,很是耗性能(2次,一次解析成js语句,一次执行) 由JSON字符串转换为JSON对象的时候能够用eval,var obj =eval('('+ str +')')
undefine: 表示不存在这个值,若是变量被声明了没有赋值。 null: 变量被定义赋值了,可是为空的状况,没有任何属性方法和值 在验证null时,必定要使用 === ,由于 ==没法分别null 和 undefined
json是JavaScript Object Notation的缩写,即JavaScript对象表示法,是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。json是存储和交换文本信息的语法,相似于XML。json采用彻底独立与语言的文本格式,它的语言格式相似于c语言家族。这些特性也使的json成为理想的数据交换语言。
JSON字符串转换为JSON对象:
var obj =eval('('+ str +')');
var obj = str.parseJSON();
var obj = JSON.parse(str);
复制代码复制代码
JSON对象转换为json字符串
var last=obj.toJSONString();
var last=JSON.stringify(obj);
复制代码复制代码
同步:浏览器访问服务器请求,用户看获得页面刷新,从新发请求,等请求完,页面刷新,新内容出现,用户看到新内容,进行下一步操做。 异步:浏览器访问服务器请求,用户正常操做,浏览器后端进行请求。等请求完,页面不刷新,新内容也会出现,用户看到新内容。
渐进加强 :针对低版本浏览器进行构建页面,保证最基本的功能,而后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。 优雅降级 :一开始就构建完整的功能,而后再针对低版本浏览器进行兼容。
attribute是dom元素在文档中做为html标签拥有的属性; property就是dom元素在js中做为对象拥有的属性。
es6是一个新的标准,它包含了许多新的语言特性和库,是JS最实质性的一次升级。 好比’箭头函数’、’字符串模板’、’generators(生成器)’、’async/await’、’解构赋值’、’class’等等,还有就是引入module模块的概念。
可让this指向固定化,这种特性颇有利于封装回调函数
async/await 是写异步代码的新方式,之前的方法有回调函数和Promise。 async/await是基于Promise实现的,它不能用于普通的回调函数。async/await与Promise同样,是非阻塞的。 async/await使得异步代码看起来像同步代码,这正是它的魔力所在。
面向过程就是对一个问题提出解决思路,而后一步步的列出函数解决,依次调用。 面向对象就是将构成问题分解成各个对象,创建对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。 面向对象是以功能来划分问题,而不是步骤
所谓Promise,简单说就是一个容器,里面保存着某个将来才会结束的事件(一般是一个异步操做)的结果。从语法上说,Promise 是一个对象,从它能够获取异步操做的消息。Promise 提供统一的 API,各类异步操做均可以用一样的方法进行处理。
Promise对象有如下两个特色: