整理中高级前端系列,能够看成面试复习,也能够看成实战来看,分享一下 方便本身,方便他人。有不足的地方欢迎评论~javascript
第一趴:css进阶css
第二趴:js进阶html
第四趴:工程化vue
自顶向下称为「事件捕获」自下向上称为「事件冒泡」java
DOM2事件规范规定,一个标准的事件流分为三个阶段。node
document.getElementsByTagName('p')[0].onclick = function(event) {
console.log(event);
alert('hello event');
};
document.getElementsByTagName('p')[0].addEventListener('click',
function(event) {
console.log(event);
alert('hello event');
});
复制代码
event 对象下的属性webpack
event 对象下的⽅法ios
<ul id="ul">
<p>1234</p>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
document.getElementById('ul').onclick = function(event) {
var target = event.target;
if (target.nodeName.toLowerCase() === 'li') {
alert(target.innerHTML);
}
}
复制代码
它的大小限制为4KB左右,众所周知,cookie是键值对的形式即key=value的格式。 咱们来封装一下,操做更方便:nginx
const userInfo = 'userInfo'
// 添加用户信息
export function setUserInfo (data) {
return history.setItem(userInfo, JSON.stringify(index))
}
// 获取用户信息
export function getUserInfo () {
return JSON.parse(history.getItem(userInfo)) ? JSON.parse(history.getItem(userInfo)) : false
}
复制代码
限制有5M超大存储
400 bad request,请求报文存在语法错误 ✨
401 unauthorized,表示发送的请求须要有经过 HTTP 认证的认证信息 ✨
403 forbidden,表示对请求资源的访问被服务器拒绝 ✨
404 not found,表示在服务器上没有找到请求的资源 ✨
使用数字签名就是用CA自带的HASH算法对证书的内容进行HASH获得一个摘要,再用CA的私钥加密,最终组成数字签名。
post 请求发送 form 数据和 json 数据的示例:
// 设置 request 的 content-type 为 application/x-www-form-urlencoded
// 设置 request 的 content-type 为 application/json
复制代码
这里有一篇很好的文章讲解连接
跨域是指一个域下的文档或脚本试图去请求另外一个域下的资源,这里跨域是广义的。 咱们前端一般所说的跨域是狭义的,由同源策略限制引发的
是一种约定,是浏览器最核心也是最基本的安全功能,若是缺了同源策略,浏览器很容易受到XSS、CSFR等攻击。 同源是指:「协议 + 域名 + 端口」知足三者相同。
限制如下几种行为:
1.) Cookie、LocalStorage 和 IndexDB 没法读取
2.) DOM 和 Js对象没法得到
3.) AJAX 请求不能发送
复制代码
普通跨域请求:只服务端设置Access-Control-Allow-Origin便可,前端无须设置, 若要带cookie请求:先后端都须要设置。
反向代理的原理很简单,即全部客户端的请求都必须先通过nginx的处理,nginx做为代理服务器再讲请求转发给node或者java服务,这样就规避了同源策略。
利用node + webpack + webpack-dev-server(proxy)代理接口跨域。
目前阶段会使用、能够本身封装 就OK了
推荐这篇大神写的 连接 TODO: 本身实现一遍最爽
这里有详细讲解 连接
第三方数据可视化插件
显然使用ESModule的模块明显符合JS开发的历史进程,由于任何一个支持JS的环境随着对应解释器得分升级,最终必定会支持 ESModule的标准。可是 并不必定对市面上的浏览器使用新特性,由此 诞生了 你们所熟知的 babel ,能把静态高版本规范代码编译为低版本规范代码,让更多浏览器支持。
可是并不理想,对于 模块化相关的 import和export关键字,babel 最终编译为 require和exports的CommonJS规范。致使浏览器中没法运行,为此 咱们又作了一步 叫作 打包(bundle)
browserify和webpack都是很是优秀的打包工具,browserify可以处理CommonJS模块化规范的包为web直接使用, webpack则能处理任何模块化规范的内容
模块打包机:分析项目结构找到js模块以及其余一些浏览器不能直接运行的扩展语言(Scss、TypeScript等),并将其打包为合适的格式以供浏览器使用。
让webpack拥有加载和解析 「非js文件」的能力
<style>
把css-loader生成的内容挂在到html页面中扩展webpack的功能,让其具备更多的灵活性。
UglifyES
压缩ES6
代码Loader在module.rules
中配置,也就是说他做为模块的解析规则而存在。 类型为数组,每一项都是一个Object
,里面描述了对于什么类型的文件(test
),使用什么加载(loader
)和使用的参数(options
)
Plugin在plugins
中单独配置。 类型为数组,每一项是一个plugin
的实例,参数都经过构造函数传入。
源代码与打包后的代码的映射关系、提高开发效率的利器,保存自动刷新页面。
就像代码须要代码规范同样,代码管理一样须要一个清晰的流程和规范
目的: 统一团队Git commit 文本标准,便于后续代码review和团队协做;
在jenkins(一个网站界面)中经过获取代码仓库中最新代码,进行自动化部署,而省去手动打包、上传服务器、部署这一系列步骤,很是方便。
同窗以为有帮助的能够点个赞哈,以示鼓励 😊