获取查询字符串参数

  1. // Assuming "?post=1234&action=edit"
  2. var urlParams = new URLSearchParams(window.location.search);
  3. console.log(urlParams.has('post')); // true
  4. console.log(urlParams.get('action')); // "edit"
  5. console.log(urlParams.getAll('action')); // ["edit"]
  6. console.log(urlParams.toString()); // "?post=1234&action=edit"
  7. console.log(urlParams.append('active', '1')); // "?post=1234&action=edit&active=1"

创建空对象

我们可以使用对象字面量{}来创建空对象,但这样创建的对象有隐式原型proto和一些对象方法比如常见的hasOwnProperty,下面这个方法可以创建一个纯对象。

  1. let dict = Object.create(null);
  2. // dict.__proto__ === "undefined"
  3. // No object properties exist until you add them

数组清洗

洗掉数组中一些无用的值,如0, undefined, null, false等

  1. myArray
  2. .map(item => {
  3. // ...
  4. })
  5. // Get rid of bad values
  6. .filter(Boolean);

键盘弹出挡表单

  1. window.addEventListener('resize', function () {
  2. if (
  3. document.activeElement.tagName === 'INPUT' ||
  4. document.activeElement.tagName === 'TEXTAREA' ||
  5. document.activeElement.getAttribute('contenteditable') == 'true'
  6. ) {
  7. window.setTimeout(function () {
  8. if ('scrollIntoView' in document.activeElement) {
  9. document.activeElement.scrollIntoView();
  10. } else {
  11. // @ts-ignore
  12. document.activeElement.scrollIntoViewIfNeeded();
  13. }
  14. }, 0);
  15. }
  16. })

解决 iOS iPhone 下键盘收起[页面不收起]导致点击事件失效问题

1 scrollIntoView方案

在 IOS 11 上某个版本的时候,用 scrollIntoView会遇到页面卡住滑不动的情况,并且只在IOS11上的某个小版本出现

  1. ;(/iphone|ipod|ipad/i.test(navigator.appVersion)) && document.addEventListener('blur', (e) => {['input', 'textarea'].includes(e.target.localName) && document.body.scrollIntoView(false) }, true)

2 document.body方案

  1. // 自行实现是否是 iOS 的判断,一般把 ipad,ipod, iphone 跟 navigagor.userAgent indexOf 一下就行
  2. if (this.userAgent.iOS) {
  3. document.addEventListener('blur', e => {
  4. ['input', 'textarea'].indexOf(e.target.localName) !== -1 && (document.body.scrollTop = document.body.scrollTop)
  5. }, true)
  6. }