乐趣区

关于http:DOMHTTPTS

DOM

事件委托

上代码:

ul.addEventListener('click', function(e){if(e.target.tagName.toLowerCase() === 'li'){fn() // 执行某个函数
     }
 })

用 mouse 事件写一个可拖拽的 div

//HTML
<div id="xxx"></div>

//JS
var dragging = false
var position = null

xxx.addEventListener('mousedown',function(e){
  dragging = true
  position = [e.clientX, e.clientY]
})


document.addEventListener('mousemove', function(e){if(dragging === false){return}
  console.log('hi')
  const x = e.clientX
  const y = e.clientY
  const deltaX = x - position[0]
  const deltaY = y - position[1]
  const left = parseInt(xxx.style.left || 0)
  const top = parseInt(xxx.style.top || 0)
  xxx.style.left = left + deltaX + 'px'
  xxx.style.top = top + deltaY + 'px'
  position = [x, y]
})
document.addEventListener('mouseup', function(e){dragging = false})

HTTP

状态码

2xx 示意胜利
3xx 示意须要进一步操作
4xx 示意浏览器方面出错
5xx 示意服务器方面出错

GET 和 POST 的区别

  • GET 在浏览器回退时是有害的,而 POST 会再次提交申请。
  • GET 产生的 URL 地址能够被 Bookmark,而 POST 不能够。
  • GET 申请会被浏览器被动 cache,而 POST 不会,除非手动设置。
  • GET 申请只能进行 url 编码,而 POST 反对多种编码方式。
  • GET 申请参数会被残缺保留在浏览器历史记录里,而 POST 中的参数不会被保留。
  • GET 申请在 URL 中传送的参数是有长度限度的,而 POST 么有。
  • 对参数的数据类型,GET 只承受 ASCII 字符,而 POST 没有限度。
  • GET 比 POST 更不平安,因为参数间接裸露在 URL 上,所以不能用来传递敏感信息。
  • GET 参数通过 URL 传递,POST 放在 Request body 中。

Cookie V.S. LocalStorage V.S. SessionStorage V.S. Session

  • Cookie V.S. LocalStorage
  1. 次要区别是 Cookie 会被发送到服务器,而 LocalStorage 不会
  2. Cookie 个别最大 4k,LocalStorage 能够用 5Mb 甚至 10Mb(各浏览器不同)
  • LocalStorage V.S. SessionStorage
  1. LocalStorage 个别不会主动过期(除非用户手动革除),而 SessionStorage 在回话完结时过期(如敞开浏览器)
  • Cookie V.S. Session
  1. Cookie 存在浏览器的文件里,Session 存在服务器的文件里
  2. Session 是基于 Cookie 实现的,具体做法就是把 SessionID 存在 Cookie 里

TS

never 类型是什么?

举个具体点的例子,当你有一个 union type:

interface Foo {type: 'foo'}

interface Bar {type: 'bar'}

type All = Foo | Bar

在 switch 当中判断 type,TS 是能够收窄类型的 (discriminated union):

function handleValue(val: All) {switch (val.type) {
    case 'foo':
      // 这里 val 被收窄为 foo
      break
    case 'bar':
      // val 在这里是 bar
      break
    default:
      // val 在这里是 never
      const exhaustiveCheck: never = val
      break
  }
}

留神在 default 外面咱们把被收窄为 never 的 val 赋值给一个显式申明为 never 的变量。如果所有逻辑正确,那么这里应该可能编译通过。然而如果起初有一天你的共事改了 All 的类型:type All = Foo | Bar | Baz
然而他遗记了在 handleValue 外面加上针对 Baz 的解决逻辑,这个时候在 default branch 外面 val 会被收窄为 Baz,导致无奈赋值给 never,产生一个编译谬误。所以通过这个方法,你能够确保 handleValue 总是穷尽 (exhaust) 了所有 All 的可能类型。

TS 比起 JS 有什么长处?

提供了类型束缚,因而更可控、更容易重构、更适宜大型项目、更容易保护。

退出移动版