为了账号安全,请及时绑定邮箱和手机立即绑定

前端基础(笔记)

标签:
Html5

HTML

如何理解HTML语义化?

  1. 增加代码可读性

  2. 利于搜索引擎优化(SEO)

默认情况下,哪些HTML标签是块级元素、哪些是内联元素?

  1. 块元素  display:block/table;有div h1 h2... table ui ol p 等

  2. 内联元素  display:inline/inline-block;有span img input button 等

CSS - 布局

    盒模型

  1. W3C盒模型 (content-box):包括margin、border、padding、content,元素宽度width=content

  2. IE盒模型 (border-box):元素的width=border + padding + content

    margin负值的问题

    相邻元素margin-top、margin-bottom的值会发生重叠,取最大值,块级元素会移动自身位置,内联元素则无效。

  1. margin-top和margin-left负值,元素向上、向左移动

  2. margin-right负值,右侧元素左移,自身不受影响。对于外界元素而言此时改变的是元素自身的宽度。

  3. margin-bottom负值,下方元素上移,自身不受影响。

    BFC(Block format context块级格式化上下文)

    一块独立的渲染区域,内部元素的渲染不会影响边界以外的元素。

    触发BFC的条件

  1. float不是none

  2. overflow不是visible

  3. position是absolute或fixed

  4. display是flex或inline-block

    常见的应用:

  1. 清除浮动

.clearfix:after{
  content:'';
  display:table;
   clear:both;
  height:0;
} 
/*兼容IE*/
.clearfix{
  *zoom:1;
}

   

    圣杯布局和双飞翼布局

  • 布局目的

  1. 三栏布局,中间一栏最先加载和渲染

  2. 两侧内容固定,中间内容随着宽度自适应

  3. 一般用于PC网页

  • 布局思路

  1. 使用float布局

  2. 两侧使用margin负值,一边中间内容横向重叠

  3. 防止中间内容被两侧覆盖,一个用padding  一个用margin

  • 代码实现 

 https://img2.sycdn.imooc.com/5f3a5042000138aa04250778.jpg https://img4.sycdn.imooc.com/5f3a50430001143e03870697.jpg

 line-height如何继承

  1. 父级元素写具体像素:比如20px,则继承line-height的值为:20px。

  2. 父级元素写比例:比如2,则继承line-height的值为:2 * 自身的font-size;

  3. 父级元素写百分比:比如200%,则继承line-height的值为: 200% * 父元素字号。(考点)

rem

@media only and (max-width:374px)<html font-size:86px> 1rem=86px;0.16rem = 0.16 * 86;
@media only and (min-width:375px) and (max-width:413px) <html font-size:100px> 1rem=100px;0.16rem = 0.16 * 100;
@media only and (min-width:414px)<html font-size:110px> 1rem=110px;0.16rem = 0.16 * 110;

JS

类型判断

  • typeof

仅能判断基础类型、函数、引用类型,但不能判断引用类型的类别(数组、对象)

  • instanceof

判断引用类型的类别,原理是通过原型链判断

简单深拷贝

function deepClone(obj={}){
    if(typeof obj !=='object' || obj == null) {return obj};
    let result = (obj instanceof Array)?[]:{};
    for(k in obj){
        if(obj.hasOwnProperty(k)) result[k] = deepClone(obj[k]);
    }
    return result;
}

 

何时使用 ===  何时使用 ==


https://img2.sycdn.imooc.com/5f3b424f00012b8a19201080.jpg

this

this的值是在函数执行时候确认的,不是定义时确认;

  1. 在普通函数中调用 - 指向全局对象window

  2. call、apply、bind调用 - 指向传入的对象

  3. 作为对象方法被调用 - 指向对象本身

  4. 在class中被调用 - 指向实例    

  5. 箭头函数 -   指向上级作用域的this

      

手写bind

Function.prototype.myBind = function(){
    var args = Array.prototype.slice.call(arguments);
  var context = args.shift();
  var fn = this;
  return function(){
    return fn.apply(context,args)
  } 
}


闭包



作用域

  • 全局作用域


  • 函数作用域


  • 块级作用域


手写Promise


EventLoop的执行顺序

宏任务(全部同步代码)  >  微任务队列所有代码   >  尝试DOM渲染  >  下一个宏任务(触发event loop指向异步队列所有代码)

宏任务和微任务


  • 宏任务和微任务的区别

    宏任务:DOM渲染后触发。微任务:DOM渲染前触发。

    宏任务:是浏览器规定的。微任务:是es6语法规定的。


HTTP

原生ajax

const xhr = new XMLHttpRequest();
xhr.open('GET',url,true异步 false同步);
xhr.onreadystatechange = function(){
//0 还未调用send,1 正在发送,2 发送成功此时已接收到返回数据,3 解析返回的数据,4 解析完成可以在客户端获取内容
    if(xhr.readState===4){
        if(xhr.status===200){
            console.log(xhr.responesText)
        }
    }
}
xhr.send(null);//post xhr.send(JSON.stringify({}))

常见的http状态码

  • 2xx 表示请求成功:200正常返回

  • 3xx 表示重定向:301(永久重定向),302(临时重定向),304(访问资源未发生变化,使用缓存资源)

  • 4xx 表示客户端请求错误:404(访问地址找不到),403(没有访问权限)

  • 5xx 服务端错误:500(服务器错误),504(网关超时)

常见的http header

  • request Headers

    Accept:浏览器可接收的数据格式

    Accept-Encoding:浏览器可接受的压缩格式,如gzip

    Accept-Language:浏览器可支持的语言编码,如zh-CN、zh

    Connection:keep-alive,一次TCP连接重复使用

    Cookie:维持客户端和服务端状态

    Host:请求的域名是什么

    User-Agent:浏览器的信息

    Content-Type:发送数据的格式,一般get请求没有,如application/json

  • Reponese Headers

    Content-Type:返回数据的格式

    Content-Length:返回数据大小,多少字节

    Content-Encoding:返回数据所用的压缩格式,如gzip

    Set-Cookie:服务端更改cookie

  • 缓存相关 Headers


    expires  catch-control,Last-Notified  Etag,If-Notified-Since  If-None-Match;

什么是Restful API


http的缓存机制




前端工程化

git常见操作命令

git config user.name 用户名 git config user.email 邮箱 配置了用户名和邮箱在提交记录里会看到用户名邮箱信息 


git add 文件名 提交某个文件 

git add . 提交所有文件

git commit -m "注释注释" 生成一条记录注释 

git checkout 文件名 撤销某个文件的修改 

git checkout . 撤销所有文件修改 checkout要在commit之前才能撤销

git checkout -b 分支名  创建并切换到新分支 

git checkout 分支名 切换分支 撤回文件修改和切换分支都是checkout 

git branch 查看分支 master分支为主分支,默认分支 

git push origin 分支名 推送修改到git远程存储库

git pull origin 分支名(例如 git pull origin master) 拉取当前服务端最新代码


git fetch 拉取服务端所有分支 

git merge 分支名 将某个分支合并到当前分支 CONFLICT冲突 

git stash 将修改暂存在当前分支的另一个区域(不影响当前分支),此时可以切换分支了 

git stach pop 将暂存的修改推出来


git status 查看文件更改状态 

git diff 查看全部更改的内容(新增的文件不在内) 

git diff 具体文件名 查看某个文件的内容 

git log 查看提交记录,Initial commit是创建时提交的,不用管 

git show id(这个id是git log 提交后commit后面显示的长串的ID,要看哪个就在show后贴哪个) 查看提交内容 

移动端抓包

window 一般用fiddler,mac一般用charles



性能优化

让加载更快

  • 减小代码体积:代码压缩(比如:webpack生产环境代码压缩,服务器使用gzip压缩)。

  • 减少请求次数:代码合并(webpack将多个css js文件打包成一个,雪碧图),服务端渲染ssr,缓存。

  • 使用更快网络:CDN。

让渲染更快

  • css 放在header,js放到body后面

  • 对dom操作做缓存、将频繁的dom操作合并为一次、dom离线化

  • 尽早开始执行js,使用DOMContentLoaded

  • 图片使用懒加载,长列表使用下拉加载更多

从用户操作优化

  • 防抖(debounce)

  指定时间内只有最后一次触发有效。

const debounce = (fn,delay=50) => {
    let timer = null;
    return function(){
        timer && clearTimeout(timer);
        timer = setTimeout(()=>{
            fn.apply(this,arguments);
            clearTimeout(timer);
        },delay)
    }
}
  • 节流(throttle)

    指定时间内只有第一次触发有效。

const throttle = (fn,delay=50) => {
    let timer = null;
    return function(){
        if(timer == null){
            fn.apply(this,augements);
            timer = setTimeout(()=>{
                timer = null;
            },delay);
        }        
   }
}

前端安全

XSS跨站请求攻击

  • 危害

    1. 流量劫持

    2. 获取用户cookie信息,盗取账号

    3. 篡改、删除页面信息

    4. 配合CSRF攻击,实施进一步攻击

  • 攻击类型

    1. 存储型XSS(即时,持久性XSS),一般常见于网页的各种输入(富文本,评论框,留言板,邮件)

    2. 反射型XSS(非即时,非持久性XSS),一般常见在浏览器中输入参数?id=<script>alert('xss')</script>

  • 攻击流程

        寻找漏洞  >  构造攻击代码  >   注入代码  

  • XSS预防

  1. 特殊字符过滤:如<script>aaa</script>过滤为&lt;script&gt;aaa&lt;/script&gt;

  2. 引入CSP(内容安全策略Content Security Policy)白名单制度

        客户端设置,<meta http-equiv="Content-Security-Policy" content="default-src www.baidu.com">

        服务端设置,setHeader('Content-Security-Policy',default-src  www.baidu.com)

CSRF跨站请求伪造

  • 如何攻击

    攻击者在网站中注入图片,图片地址为攻击者想要请求的接口

  • 预防

    1. get只获取数据,修改数据用post

    2. 设置cookie sameSite属性(不随着请求发送),设置cookie不能被第三方网站访问

    3. 对请求做验证,比如验证码或者token

    4. 服务端队请求来源Referer做验证






点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消