npm package: @guanwei/app-javascript
Description: some utils 4 js
Author: hezulong1
Latest version: 2.0.5
Deprecated: Package no longer supported. You can use @vividcat/shared instead.

# app-javascript

`app-javascript`是一个轻量级，零依赖工具库，支持服务端和客户端，更多是定制化，供自己使用的，对于`treeshake`可以很好支持。

## 安装

1. `npm`安装（推荐，可定制化）

```bash
npm i @guanwei/app-javascript
```

2. `link`标签

通用写法：

```html
<script href="//unpkg.com/@guanwei/app-javascript"></script>
<script>
  console.log(AppUtils.isClient)
</script>  
```

或者使用 es6 module

```html
<script module>
  import { isClient } from 'https://unpkg.com/@guanwei/app-javascript?module'
  console.log(isCilent)
</script>
```

## Api

| Name | File | Description | Params | Return |
| ---- | ---- | ----------- | ------ |:------:|
| **bindFn** | [bindFn.ts](https://github.com/hezulong1/app-javascript/blob/main/src/bindFn.ts) | 绑定函数上下文 | `(fn: Function, ctx: unknown)` | `any` |
| **add** | [calc.ts](https://github.com/hezulong1/app-javascript/blob/main/src/calc.ts) | 加 | `(n1: number, n2: number)` | `number` |
| **sub** | [calc.ts](https://github.com/hezulong1/app-javascript/blob/main/src/calc.ts) | 减 | `(n1: number, n2: number)` | `number` |
| **mul** | [calc.ts](https://github.com/hezulong1/app-javascript/blob/main/src/calc.ts) | 乘 | `(n1: number, n2: number)` | `number` |
| **div** | [calc.ts](https://github.com/hezulong1/app-javascript/blob/main/src/calc.ts) | 除 | `(n1: number, n2: number)` | `number` |
| **hasClass** | [className.ts](https://github.com/hezulong1/app-javascript/blob/main/src/className.ts) | 是否含有指定类名 | `(element: HTMLElement, cls: string)` | `boolean` |
| **addClass** | [className.ts](https://github.com/hezulong1/app-javascript/blob/main/src/className.ts) | 添加指定类名 | `(element: HTMLElement, cls: string)` | - |
| **removeClass** | [className.ts](https://github.com/hezulong1/app-javascript/blob/main/src/className.ts) | 移除指定类名 | `(element: HTMLElement, cls: string)` | - |
| **copy** | [copy.ts](https://github.com/hezulong1/app-javascript/blob/main/src/copy.ts) | 简易版深拷贝 | `<T = unknown>(source: T, silence?: boolean)` | `T` |
| **def** | [def.ts](https://github.com/hezulong1/app-javascript/blob/main/src/def.ts) | 定义对象属性 | `(obj: object, key: string \| symbol, value: any)` | - |
| **isClient** | [env.ts](https://github.com/hezulong1/app-javascript/blob/main/src/env.ts) | **常量**：判别是否为客户端 | - | - |
| **isFirefox** | [env.ts](https://github.com/hezulong1/app-javascript/blob/main/src/env.ts) | **常量**：是否是火狐浏览器 | - | - |
| **isAndroid** | [env.ts](https://github.com/hezulong1/app-javascript/blob/main/src/env.ts) | **常量**：是否是安卓系统 | - | - |
| **isOS** | [env.ts](https://github.com/hezulong1/app-javascript/blob/main/src/env.ts) | **常量**：是否是苹果系统| - | - |
| **isWindowsPhone** | [env.ts](https://github.com/hezulong1/app-javascript/blob/main/src/env.ts) | **常量**：是否是Win手机系统| - | - |
| **isSymbianos** | [env.ts](https://github.com/hezulong1/app-javascript/blob/main/src/env.ts) | **常量**：是否是塞班系统| - | - |
| **isMobile** | [env.ts](https://github.com/hezulong1/app-javascript/blob/main/src/env.ts) | **常量**：是否是手机| - | - |
| **getURLParam** | [getURLParam.ts](https://github.com/hezulong1/app-javascript/blob/main/src/getURLParam.ts) | 获取链接参数 | `(name: string, search?: string)` | `string \| null` |
| **looseEqual** | [looseEqual.ts](https://github.com/hezulong1/app-javascript/blob/main/src/looseEqual.ts) | 比较两个值是否相等(代码取自 [@vue/shared](https://www.npmjs.com/package/@vue/shared)) | `(a: any, b: any)` | `boolean` |
| **looseIndexOf** | [looseEqual.ts](https://github.com/hezulong1/app-javascript/blob/main/src/looseEqual.ts) | 找到数组中指定元素的下标 | `(arr: any[], val: any)` | `number` |
| **noop** | [noop.ts](https://github.com/hezulong1/app-javascript/blob/main/src/noop.ts) | 空函数，用于赋值 | - | - |
| **getPathProp** | [pathProp.ts](https://github.com/hezulong1/app-javascript/blob/main/src/pathProp.ts) | 获取指定对象路径属性值 | `(target: Record<any, any>, path: string \| Array<string>)` | `any` |
| **setPathProp** | [pathProp.ts](https://github.com/hezulong1/app-javascript/blob/main/src/pathProp.ts) | 设置指定对象路径属性值 | `(target: Record<any, any>, path: string \| Array<string>, value: any)` | `boolean` |
| **getStorage** | [storage.ts](https://github.com/hezulong1/app-javascript/blob/main/src/storage.ts) | 获取指定范围的本地储存 | `(name: string, content: any)` | - |
| **setStorage** | [storage.ts](https://github.com/hezulong1/app-javascript/blob/main/src/storage.ts) | 设置指定范围的本地储存 | `(name: string)` | `string \| null \| undefined` |
| **removeStorage** | [storage.ts](https://github.com/hezulong1/app-javascript/blob/main/src/storage.ts) | 移除指定范围的本地储存 | `(name: string)` | - |
| **styleInject** | [styleInject.ts](https://github.com/hezulong1/app-javascript/blob/main/src/styleInject.ts) | 在`head`标签注入一段样式文本 | `(css: any, options?: Options)` | - |
| **toDateString** | [toDateString.ts](https://github.com/hezulong1/app-javascript/blob/main/src/toDateString.ts) | 格式化部分时间格式 | `(time?: string \| Date, format?: string)` | `string` |
| **toNumber** | [toNumber.ts](https://github.com/hezulong1/app-javascript/blob/main/src/toNumber.ts) | 将输入值格式化为数字 | `(val: any)` | `any` |
| **trim** | [trim.ts](https://github.com/hezulong1/app-javascript/blob/main/src/trim.ts) | 将前后空白移除 | `(string: string)` | `string` |
| **uuid** | [uuid.ts](https://github.com/hezulong1/app-javascript/blob/main/src/uuid.ts) | 生成一个uuid | - | `string` |
| **hasOwn** | [type.ts](https://github.com/hezulong1/app-javascript/blob/main/src/type.ts) | 当前值是否含有制定属性 | `(val: object, key: string \| symbol)` | `boolean` |
| **toRawType** | [type.ts](https://github.com/hezulong1/app-javascript/blob/main/src/type.ts) | 当前值表现的类型名称 | `(val: unknown)` | `string` |
| **isString** | [type.ts](https://github.com/hezulong1/app-javascript/blob/main/src/type.ts) | 是否是字符串 | `(val: unknown)` | `boolean` |
| **isNumber** | [type.ts](https://github.com/hezulong1/app-javascript/blob/main/src/type.ts) | 是否是数字 | `(val: unknown)` | `boolean` |
| **isBoolean** | [type.ts](https://github.com/hezulong1/app-javascript/blob/main/src/type.ts) | 是否是布尔 | `(val: unknown)` | `boolean` |
| **isBooleanish** | [type.ts](https://github.com/hezulong1/app-javascript/blob/main/src/type.ts) | 是否是布尔或者字符串`'true'`，`'false'` | `(val: any)` | `boolean` |
| **isSymbol** | [type.ts](https://github.com/hezulong1/app-javascript/blob/main/src/type.ts) | 是否是`Symbol`值 | `(val: unknown)` | `boolean` |
| **isRegExp** | [type.ts](https://github.com/hezulong1/app-javascript/blob/main/src/type.ts) | 是否是正则 | `(val: unknown)` | `boolean` |
| **isNil** | [type.ts](https://github.com/hezulong1/app-javascript/blob/main/src/type.ts) | 是否是`null`或者`undefined` | `(val: unknown)` | `boolean` |
| **isNumeric** | [type.ts](https://github.com/hezulong1/app-javascript/blob/main/src/type.ts) | 是否可转成数字化 | `(val: unknown)` | `boolean` |
| **isDef** | [type.ts](https://github.com/hezulong1/app-javascript/blob/main/src/type.ts) | 是否定义了存在值，与函数`isNil`的结果相反 | `<T = any>(val?: T)` | `boolean` |
| **isDate** | [type.ts](https://github.com/hezulong1/app-javascript/blob/main/src/type.ts) | 是否是日期 | `(val: unknown)` | `boolean` |
| **isFunction** | [type.ts](https://github.com/hezulong1/app-javascript/blob/main/src/type.ts) | 是否是函数 | `(val: unknown)` | `boolean` |
| **isArray** | [type.ts](https://github.com/hezulong1/app-javascript/blob/main/src/type.ts) | 是否是数组 | `(val: any)` | `boolean` |
| **isObject** | [type.ts](https://github.com/hezulong1/app-javascript/blob/main/src/type.ts) | 是否是对象 | `(val: unknown)` | `boolean` |
| **isPromise** | [type.ts](https://github.com/hezulong1/app-javascript/blob/main/src/type.ts) | 是否是`Promise` | `(val: unknown)` | `boolean` |
| **isPlainObject** | [type.ts](https://github.com/hezulong1/app-javascript/blob/main/src/type.ts) | 是否是纯对象，即指向`Object` | `(val: unknown)` | `boolean` |
| **isEmptyObject** | [type.ts](https://github.com/hezulong1/app-javascript/blob/main/src/type.ts) | 是否是空对象 | `(val: any)` | `boolean` |
| **validateURL** | [validate.ts](https://github.com/hezulong1/app-javascript/blob/main/src/validate.ts) | 验证链接地址 | `(val: string)` | `boolean` |
| **validateEmail** | [validate.ts](https://github.com/hezulong1/app-javascript/blob/main/src/validate.ts) | 验证邮箱 | `(val: string)` | `boolean` |
| **validateLetter** | [validate.ts](https://github.com/hezulong1/app-javascript/blob/main/src/validate.ts) | 验证字母 | `(val: string)` | `boolean` |
| **validateMobileNumber** | [validate.ts](https://github.com/hezulong1/app-javascript/blob/main/src/validate.ts) | 验证手机号 | `(val: string)` | `boolean` |

## 对比 1.0.0

+ 新增`isClient`(2022/01/16)：用于判断是客户端还是服务端

+ 新增`hasOwn`：用于判别对象是否含有此属性
+ 新增`toRawType`：用于判别入参构造名称
+ 新增`isBooleanish`：用于判别 boolean 值和'true', 'false'
+ 新增`isSymbol`：用于判别 symbol 类型
+ 新增`isRegExp`：用于判别是否为正则表达式
+ 新增`isNumeric`：用于判别数字且那些可能是数字的字符串，如 '1', '2' 等
+ 新增`isDef`：用于判别是否已经定义，它是 `isNil` 的**非**
+ 新增`isDate`：用于判别是否是日期类型
+ 新增`looseIndexOf`：`Array.findIndex`的封装
+ 新增`addClass`/`removeClass`/`hasClass`：对于`HTMLElement`的类名操作
+ 新增`def`：用于定义对象属性

+ 更新`arrayEquals`：之前仅仅比较数组，现在使用`@vue/shared`包内的方法`looseEqual`，更加强大的对比功能，所以借鉴过来
+ 更新`toNumber`：之前直接将非数字变空白，过于暴力和不合理，此次重构，使之更合理化

- 更名`bind` => `bindFn`
- 更名`getStore` => `getStorage`, `setStore` => `setStorage`, `removeStore` => `removeStorage`
- 更名`isNull` => `isNil`
- 更名`getKeyValue` => `getPathProp`, `setKeyValue` => `setPathProp`

- 移除`manba`：第三包，依旧推荐可用，只是不在集成了
- 移除`throttle`/`debounce`：函数写的依旧不淳熟，推荐第三包如：`lodash.throttle`，`lodash.debounce`
- 移除`getCookie`/`setCookie`/`removeCookie`：集成 [`js-cookie`](https://www.npmjs.com/package/js-cookie)，可根据项目再次调整
- 移除`generateId`/`freeze`/`trimAll`/`padLeft`/`toCN`/`toInt`/`cut`/`escape`：使用度偏小
- 移除`beginWith`/`endWidth`(<small>**名称拼写错误**</small>：已经有可替代函数，如 `String.prototype.startsWith`/`String.prototype.endsWith`
- 移除*暂时*`extend`，请使用`Object.assign`或者第三方库作为替代