# itools

前端开发中常用的工具方法

```
size < 3K
```

## Install

```javascript
npm i -S itools.js
```

## Usage

```javascript
// esm
import iTools from 'itools.js'
// vue
Vue.prototype.$tools = iTools

// cjs
const iTools = require('itools.js')

// iife
<script src='dist/itools.js'></script>
```

## API

- clone

  对象深拷贝

  ```javascript
  let obj_a = { a: 1 }
  let obj_b = iTools.clone(obj_a) // cloneDeep
  ```

- cookie

  cookie 操作

  ```javascript
  iTools.cookie.set('name', 'value', 'exSeconds', 'path')
  let name = iTools.cookie.get('name')
  iTools.cookie.del('name')
  ```

- copy

  复制一个字符串到剪贴板

  ```javascript
  let str = 'copy str'
  if (iTools.copy(str)) {
    alert('copy success')
  }
  ```

- download

  保存一个路径到本地并重命名

  ```javascript
  let filename = '当前页面'
  let filePath = window.location.href
  iTools.download(filename, filePath)
  ```

- getParam

  获取浏览器地址栏中的参数

  ```javascript
  let name = iTools.getParam('name')
  let age = iTools.getParam('age', 'https://abc.com?age=18')
  ```

- randomStr

  获取固定长度的随机字符串

  ```javascript
  let str = iTools.randomStr(10) //
  let str2 = iTools.randomStr(9, 'letter') // only letter
  let str3 = iTools.randomStr(8, 'number') // only number
  console.log(str, str2, str3) // lq3hc8ogxl carijlvjz 83568934
  ```

- type

  判断变量类型

  ```javascript
  console.log(iTools.type('str')) // string
  console.log(iTools.type(124)) // number
  console.log(iTools.type(true)) // boolean
  console.log(iTools.type(null)) // null
  console.log(iTools.type([1, 2, 3])) // array
  console.log(iTools.type(() => {})) // function
  console.log(iTools.type({ a: 1 })) // object
  console.log(iTools.type(new Date())) // date
  console.log(iTools.type(undefined)) // undefined
  ```

- uniqueId

  获取唯一 ID

  ```javascript
  console.log(iTools.uniqueId()) // kdqsnvmi_zri604sxb89
  ```

- debounce & throttle

  防抖和节流函数

  ```javascript
  function logPos(e) {
    console.log(e.pageX, e.pageY)
  }
  // debounce
  // document.addEventListener('mousemove', iTools.debounce(logPos, 500))
  // throttle
  document.addEventListener('mousemove', iTools.throttle(logPos, 500))
  ```

- trim

  针对 string、array、object 格式，深度 trim

  ```javascript
  let str4 = ' aa '
  let arr = [' aa ', ' bb ']
  let obj = { a: ' aa ', b: [' bb  '] }
  console.log(iTools.trim(str4)) // aa
  console.log(iTools.trim(arr)) // ['aa','bb']
  console.log(iTools.trim(obj)) // {a:'aa',b:['bb']}
  ```

- once

  方法仅执行一次

  ```javascript
  let objOnce = {
    name: 'once',
    getName(value) {
      console.log(this.name, value)
    },
  }
  let objOnce2 = {
    name: 'once2',
  }
  let onceFn = iTools.once(objOnce.getName, objOnce2)
  onceFn(1) // once2 1
  onceFn(2)
  ```
