From c5e939a2a0eb03e97f75556f56f5c69530ddb333 Mon Sep 17 00:00:00 2001 From: eduosi Date: Tue, 3 Dec 2024 11:35:14 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E9=83=A8=E7=BD=B2=E3=80=91=EF=BC=9A20?= =?UTF-8?q?24-12-03=2011:35:14?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CNAME | 1 + docs/guide.md | 1 + docs/index.md | 6 + docs/installation.html | 30 + docs/intro.html | 20 + docs/license.html | 34 + docs/quickstart.html | 32 + docs/requirement.html | 50 + docs/version.html | 24 + index.html | 16 + js/stat.js | 7 + manual/2.0/array.html | 514 ++++ manual/2.0/browser.html | 366 +++ manual/2.0/date.html | 287 ++ manual/2.0/document.html | 238 ++ manual/2.0/function.html | 121 + manual/2.0/index.html | 30 + manual/2.0/location.html | 109 + manual/2.0/math.html | 70 + manual/2.0/number.html | 197 ++ manual/2.0/object.html | 949 +++++++ manual/2.0/optional.html | 282 ++ manual/2.0/prototype.html | 157 ++ manual/2.0/string.html | 1039 +++++++ manual/2.0/try.html | 81 + manual/2.0/window.html | 90 + manual/2.1/array.html | 514 ++++ manual/2.1/browser.html | 366 +++ manual/2.1/cookie.html | 152 + manual/2.1/date.html | 287 ++ manual/2.1/document.html | 242 ++ manual/2.1/function.html | 121 + manual/2.1/index.html | 30 + manual/2.1/location.html | 109 + manual/2.1/math.html | 70 + manual/2.1/number.html | 197 ++ manual/2.1/object.html | 949 +++++++ manual/2.1/optional.html | 282 ++ manual/2.1/prototype.html | 157 ++ manual/2.1/string.html | 1039 +++++++ manual/2.1/try.html | 81 + manual/2.1/window.html | 90 + manual/2.2/array.html | 514 ++++ manual/2.2/browser.html | 366 +++ manual/2.2/cookie.html | 152 + manual/2.2/date.html | 287 ++ manual/2.2/document.html | 242 ++ manual/2.2/function.html | 121 + manual/2.2/index.html | 30 + manual/2.2/location.html | 109 + manual/2.2/math.html | 70 + manual/2.2/number.html | 197 ++ manual/2.2/object.html | 1049 +++++++ manual/2.2/optional.html | 282 ++ manual/2.2/prototype.html | 157 ++ manual/2.2/string.html | 1039 +++++++ manual/2.2/try.html | 81 + manual/2.2/window.html | 90 + manual/3.0/array.html | 514 ++++ manual/3.0/browser.html | 366 +++ manual/3.0/cookie.html | 152 + manual/3.0/date.html | 287 ++ manual/3.0/document.html | 242 ++ manual/3.0/function.html | 121 + manual/3.0/index.html | 30 + manual/3.0/location.html | 109 + manual/3.0/math.html | 70 + manual/3.0/number.html | 197 ++ manual/3.0/object.html | 1049 +++++++ manual/3.0/optional.html | 282 ++ manual/3.0/prototype.html | 157 ++ manual/3.0/string.html | 1039 +++++++ manual/3.0/try.html | 81 + manual/3.0/window.html | 136 + manual/index.html | 19 + manual/overview.html | 45 + search_json.js | 2959 ++++++++++++++++++++ support.html | 16 + ydoc/images/android-chrome-192x192.png | Bin 0 -> 11657 bytes ydoc/images/android-chrome-512x512.png | Bin 0 -> 34589 bytes ydoc/images/apple-touch-icon.png | Bin 0 -> 10867 bytes ydoc/images/browserconfig.xml | 9 + ydoc/images/dog@1x.png | Bin 0 -> 2368 bytes ydoc/images/dog@2x.png | Bin 0 -> 6266 bytes ydoc/images/dogbg@1x.png | Bin 0 -> 35590 bytes ydoc/images/dogbg@2x.png | Bin 0 -> 93633 bytes ydoc/images/favicon-16x16.png | Bin 0 -> 1253 bytes ydoc/images/favicon-32x32.png | Bin 0 -> 1784 bytes ydoc/images/favicon.ico | Bin 0 -> 15086 bytes ydoc/images/logo.png | Bin 0 -> 23290 bytes ydoc/images/manifest.json | 19 + ydoc/images/mstile-150x150.png | Bin 0 -> 8361 bytes ydoc/images/safari-pinned-tab.svg | 70 + ydoc/scripts/app.js | 87 + ydoc/scripts/plugins/dollar.min.js | 6 + ydoc/scripts/plugins/responsive-nav.min.js | 1 + ydoc/scripts/plugins/slideout.min.js | 1 + ydoc/styles/style.css | 2281 +++++++++++++++ ydoc/ydoc-plugin-search/core.js | 104 + ydoc/ydoc-plugin-search/search.css | 118 + ydoc/ydoc-plugin-search/search.js | 127 + 101 files changed, 24917 insertions(+) create mode 100644 CNAME create mode 100644 docs/guide.md create mode 100644 docs/index.md create mode 100644 docs/installation.html create mode 100644 docs/intro.html create mode 100644 docs/license.html create mode 100644 docs/quickstart.html create mode 100644 docs/requirement.html create mode 100644 docs/version.html create mode 100644 index.html create mode 100644 js/stat.js create mode 100644 manual/2.0/array.html create mode 100644 manual/2.0/browser.html create mode 100644 manual/2.0/date.html create mode 100644 manual/2.0/document.html create mode 100644 manual/2.0/function.html create mode 100644 manual/2.0/index.html create mode 100644 manual/2.0/location.html create mode 100644 manual/2.0/math.html create mode 100644 manual/2.0/number.html create mode 100644 manual/2.0/object.html create mode 100644 manual/2.0/optional.html create mode 100644 manual/2.0/prototype.html create mode 100644 manual/2.0/string.html create mode 100644 manual/2.0/try.html create mode 100644 manual/2.0/window.html create mode 100644 manual/2.1/array.html create mode 100644 manual/2.1/browser.html create mode 100644 manual/2.1/cookie.html create mode 100644 manual/2.1/date.html create mode 100644 manual/2.1/document.html create mode 100644 manual/2.1/function.html create mode 100644 manual/2.1/index.html create mode 100644 manual/2.1/location.html create mode 100644 manual/2.1/math.html create mode 100644 manual/2.1/number.html create mode 100644 manual/2.1/object.html create mode 100644 manual/2.1/optional.html create mode 100644 manual/2.1/prototype.html create mode 100644 manual/2.1/string.html create mode 100644 manual/2.1/try.html create mode 100644 manual/2.1/window.html create mode 100644 manual/2.2/array.html create mode 100644 manual/2.2/browser.html create mode 100644 manual/2.2/cookie.html create mode 100644 manual/2.2/date.html create mode 100644 manual/2.2/document.html create mode 100644 manual/2.2/function.html create mode 100644 manual/2.2/index.html create mode 100644 manual/2.2/location.html create mode 100644 manual/2.2/math.html create mode 100644 manual/2.2/number.html create mode 100644 manual/2.2/object.html create mode 100644 manual/2.2/optional.html create mode 100644 manual/2.2/prototype.html create mode 100644 manual/2.2/string.html create mode 100644 manual/2.2/try.html create mode 100644 manual/2.2/window.html create mode 100644 manual/3.0/array.html create mode 100644 manual/3.0/browser.html create mode 100644 manual/3.0/cookie.html create mode 100644 manual/3.0/date.html create mode 100644 manual/3.0/document.html create mode 100644 manual/3.0/function.html create mode 100644 manual/3.0/index.html create mode 100644 manual/3.0/location.html create mode 100644 manual/3.0/math.html create mode 100644 manual/3.0/number.html create mode 100644 manual/3.0/object.html create mode 100644 manual/3.0/optional.html create mode 100644 manual/3.0/prototype.html create mode 100644 manual/3.0/string.html create mode 100644 manual/3.0/try.html create mode 100644 manual/3.0/window.html create mode 100644 manual/index.html create mode 100644 manual/overview.html create mode 100644 search_json.js create mode 100644 support.html create mode 100644 ydoc/images/android-chrome-192x192.png create mode 100644 ydoc/images/android-chrome-512x512.png create mode 100644 ydoc/images/apple-touch-icon.png create mode 100644 ydoc/images/browserconfig.xml create mode 100644 ydoc/images/dog@1x.png create mode 100644 ydoc/images/dog@2x.png create mode 100644 ydoc/images/dogbg@1x.png create mode 100644 ydoc/images/dogbg@2x.png create mode 100644 ydoc/images/favicon-16x16.png create mode 100644 ydoc/images/favicon-32x32.png create mode 100644 ydoc/images/favicon.ico create mode 100644 ydoc/images/logo.png create mode 100644 ydoc/images/manifest.json create mode 100644 ydoc/images/mstile-150x150.png create mode 100644 ydoc/images/safari-pinned-tab.svg create mode 100644 ydoc/scripts/app.js create mode 100644 ydoc/scripts/plugins/dollar.min.js create mode 100644 ydoc/scripts/plugins/responsive-nav.min.js create mode 100644 ydoc/scripts/plugins/slideout.min.js create mode 100644 ydoc/styles/style.css create mode 100644 ydoc/ydoc-plugin-search/core.js create mode 100644 ydoc/ydoc-plugin-search/search.css create mode 100644 ydoc/ydoc-plugin-search/search.js diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..6200374 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +prototype.buession.com diff --git a/docs/guide.md b/docs/guide.md new file mode 100644 index 0000000..7f6834d --- /dev/null +++ b/docs/guide.md @@ -0,0 +1 @@ +文档完善中 \ No newline at end of file diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..85709e3 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,6 @@ +# 框架介绍 + + +### Buession Prototype 框架是什么? +Buession Prototype 是基于对原生 JavaScript 对象(如:String、Array、Date)的扩展,和浏览器兼容性的处理,并添加在实际场景中的一些常用方法。 +该框架借鉴了其它语言的一些 API 和早期 JavaScript 框架 [prototypejs](http://prototypejs.org/) \ No newline at end of file diff --git a/docs/installation.html b/docs/installation.html new file mode 100644 index 0000000..e31e5a3 --- /dev/null +++ b/docs/installation.html @@ -0,0 +1,30 @@ +安装及使用-文档

安装及使用

+

您可以通过 NPMYARN 或者通过 <script> 的方式引入 unpkg.com 上的包;稳定版 Version

+

NPM

+
npm install @buession/prototype
+# or
+yarn add @buession/prototype
+
+

CDN

+
+

对于生产环境,我们推荐链接到一个明确的版本号和构建文件,以避免新版本造成的不可预期的破坏。

+
+
最新版:<script src="https://unpkg.com/@buession/prototype/dist/prototype.min.js" type="text/javascript"></script>
+具体版本:<script src="https://unpkg.com/@buession/prototype@版本/dist/prototype.min.js" type="text/javascript"></script>
+
+
\ No newline at end of file diff --git a/docs/intro.html b/docs/intro.html new file mode 100644 index 0000000..fe0b5b0 --- /dev/null +++ b/docs/intro.html @@ -0,0 +1,20 @@ +框架介绍-文档

框架介绍

+

Buession Prototype 框架是什么?

+

Buession Prototype 是基于对原生 JavaScript 对象(如:String、Array、Date)的扩展,和浏览器兼容性的处理,并添加在实际场景中的一些常用方法。 +该框架借鉴了其它语言的一些 API 和早期 JavaScript 框架 prototypejs

+
\ No newline at end of file diff --git a/docs/license.html b/docs/license.html new file mode 100644 index 0000000..ae01547 --- /dev/null +++ b/docs/license.html @@ -0,0 +1,34 @@ +开源协议-文档

开源协议

+

MIT License

+

Copyright (c) 2021 Buession

+

Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions:

+

The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software.

+

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.

+
\ No newline at end of file diff --git a/docs/quickstart.html b/docs/quickstart.html new file mode 100644 index 0000000..36af000 --- /dev/null +++ b/docs/quickstart.html @@ -0,0 +1,32 @@ +快速入门-文档

快速入门

+
+

TIP

+
+

官方指南假设您已了解"权限"方面的相关知识,关于 HTML 和 JavaScript 的初级知识。如果您使用 npm 包,那么您需要具备掌握 npm 的基础知识,否则这不是您使用 Buession Prototype 的最佳方式;此种情况下,将建议您使用 script 标签引入 Buession Prototype 的文件。

+
+
+

您可以根据本文档中的示例,快速熟悉 Buession Prototype 的使用方法,本文档中所有示例基于原生 js 和 vue 二者编写。

+

本文档给出了不通方法的安装方式,但是我们始终建议您,直接下载压缩后的文件到您的项目中进行使用,或者直接引用 unpkgjsdelivr的资源。

+

下一步可做什么?

+

您对 Buession Prototype 大致了解后,您接下来可以做以下事情:

+
    +
  • 了解兼容性:了解 Buession Prototype 对浏览器的兼容性
  • +
  • 安装:安装/引用 Buession Prototype
  • +
  • 使用:开始使用 BuessionPrototype 功能
  • +
+
\ No newline at end of file diff --git a/docs/requirement.html b/docs/requirement.html new file mode 100644 index 0000000..316c8e8 --- /dev/null +++ b/docs/requirement.html @@ -0,0 +1,50 @@ +环境要求-文档

环境要求

+

支持环境

+
    +
  • 现代浏览器
  • +
  • IE9,IE10,IE11
  • +
+ + + + + + + + + + + + + + + + + + + + + +
IE / Edge
IE / Edge
Firefox
Firefox
Chrome
Chrome
Safari
Safari
iOS Safari
iOS Safari
Opera
Opera
IE9, IE10, IE11, Edgelast 5 versionslast 5 versionslast 5 versionslast 5 versionslast 5 versions
+

NodeJs

+

node v13+,建议使用 v14 及其以上版本

+

TypeScript

+

TypeScript 4.1.x

+

ES

+

支持 ES5、ES6、ES2015、ES2016、ES2017、ES2018、ESNext 的版本。

+
\ No newline at end of file diff --git a/docs/version.html b/docs/version.html new file mode 100644 index 0000000..3dcd1e3 --- /dev/null +++ b/docs/version.html @@ -0,0 +1,24 @@ +版本说明-文档

版本说明

+

该项目基于 GNU 版风格定义项目版本,即:主版本号.子版本号.修正版本号。

+

管理策略

+
    +
  • 主版本号,发生变更时,不保证所有的 API 对上一个版本兼容,但保障大部分能兼容;主版本变更,可能涉及类、接口、枚举、方法的删除,或者包名的变更
  • +
  • 子版本号,发生变更时,完全兼容上一个版本,主要会增加一些小的功能或API,底层逻辑的调整调优
  • +
  • 修正版本号,主要用于修复 BUG、优化性能、安全漏洞修复,不会新增、变更、删除已有 API
  • +
+
\ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..db7ee1d --- /dev/null +++ b/index.html @@ -0,0 +1,16 @@ +Buession Prototype

一款 JavaScript/TypeScript 原生对象扩展框架

Buession Prototype 是基于对原生 JavaScript 对象(如:String、Array、Date)的扩展,可用于 Node 环境,和浏览器兼容性的处理,并添加在实际场景中的一些常用方法。

当前版本: v3.0.0

bg
优雅

旨在提供便捷的、可靠的基于原生 JavaScript/TypeScript 扩展的类库,拥有完善的文档和高可读性的源码

易用

觉大部分 API 基于原生 JavaScript/TypeScript 对象/类的扩展,参考学习 prototype.js

简洁

与其它框架无耦合,高内聚低耦合

高效

min 版本 js 文件仅 16 kB,加载速度快,代码简洁运行效率高

兼容

支持 Node 和 Browser 运行环境,支持主流浏览器,支持原生 JS 和 ES

开源

作为开源项目,我们拥有高质量的代码,对社区的需求能够作出积极快速响应

\ No newline at end of file diff --git a/js/stat.js b/js/stat.js new file mode 100644 index 0000000..bbd8b96 --- /dev/null +++ b/js/stat.js @@ -0,0 +1,7 @@ +var _hmt = _hmt || []; +(function() { + var hm = document.createElement("script"); + hm.src = "https://hm.baidu.com/hm.js?f3605403ca686f975d2c5a188faed402"; + var s = document.getElementsByTagName("script")[0]; + s.parentNode.insertBefore(hm, s); +})(); \ No newline at end of file diff --git a/manual/2.0/array.html b/manual/2.0/array.html new file mode 100644 index 0000000..db31240 --- /dev/null +++ b/manual/2.0/array.html @@ -0,0 +1,514 @@ +Array 参考手册-参考手册

Array 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
isEmpty判断数组是否为空数组
exists判断元素 item 是否在数组中
first获取数组第一个元素
last获取数组最后一个元素
each按顺序为数组中的每个元素调用一次函数
size获取数组大小
merge连接两个或多个数组
compact返回一个不包含 null/undefined 值元素的数组的新版本
unique对数组的元素进行去重
without返回不包括参数中任意一个指定值的数组
clone克隆数组
clear清空数组
+
+

isEmpty()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断数组是否为空数组

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 数组为空,返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = [].isEmpty(); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = ['a', 'b', 'c'].isEmpty() // false
+  }
+});
+</script>
+
+

exists(item: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断元素 item 是否在数组中

    +
  • +
  • +

    参数:item - any 待检测元素

    +
  • +
  • +

    返回值:boolean 元素 item 是否在数组中返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].exists('a'); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = ['1', '2'].exists(2) // false
+  }
+});
+</script>
+
+

first()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取数组第一个元素

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:any 数组第一个元素

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].first(); // a
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = [1, 2].first() // 1
+  }
+});
+</script>
+
+

last()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取数组最后一个元素

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:any 数组最后一个元素

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].last(); // b
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = [1, 2].last() // 2
+  }
+});
+</script>
+
+

each(callback: (value: T, index: number, array: readonly T[]) => void, thisArg?: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:按顺序为数组中的每个元素调用一次函数,forEach的别名

    +
  • +
  • +

    参数:callback - (value: T, index: number, array: readonly T[]) => void as Function callback 为数组中的每个元素运行的函数,其中:value 为前元素的值,index 为当前元素的数组索引,array 为当前元素所属的数组对象 +any thisArg 可选。要传递给函数以用作其 "this" 值的值,如果此参数为空,则值 "undefined" 将作为其 "this" 值传递

    +
  • +
  • +

    返回值:void

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  ['a', 'b'].each(function (currentValue) {
+      console.log(currentValue)
+  });
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    ['a', 'b'].each(function (currentValue) {
+      console.log(currentValue)
+    })
+  }
+});
+</script>
+
+

size()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取数组大小

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:number 数组大小

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].size(); // 2
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: number = [].size() // 0
+  }
+});
+</script>
+
+

merge(...items: T[])

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:连接两个或多个数组

    +
  • +
  • +

    参数:items - any as T 待连接的 T 类型的数组

    +
  • +
  • +

    返回值:Array<T> 已连接数组的副本

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = [1, 3].merge(2, 4); // [1, 3, 2, 4]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    console result: string[] = ['a', 'b'].merge('c', 'd') // [a, b, c, d]
+  }
+});
+</script>
+
+

compact()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回一个不包含 null/undefined 值元素的数组的新版本

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Array<T> 不包含 null/undefined 值元素的数组的新版本

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b', null, 'c', 'd'].compact(); // [a, b, c, d]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = ['a', 'b', null, 'c', 'd', undefined].compact() // [a, b, c, d]
+  }
+});
+</script>
+
+

unique()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:对数组的元素进行去重

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Array<T> 数组元素进行去重后的新版本

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b', 'c', 'd', 'b', 'd'].unique(); // [a, b, c, d]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = ['a', 'b', 'c', 'c', 'd'].unique() // [a, b, c, d]
+  }
+});
+</script>
+
+

without(values: T[])

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回不包括参数中任意一个指定值的数组

    +
  • +
  • +

    参数:values - any as T[] 排除值数组

    +
  • +
  • +

    返回值:Array<T> 不包括参数中任意一个指定值的数组

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b', 'c', 'd', 'b', 'd'].without('a', 'b'); // [c, d]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = ['a', 'b', 'c', 'd', 'b', 'd'].without('a', 'b') // [c, d]
+  }
+});
+</script>
+
+

clone()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:克隆数组

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Array<T> 克隆结果

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].clone(); // [a, b]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = ['a', 'b'].clone() // [a, b]
+  }
+});
+</script>
+
+

clear()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:清空数组

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Array<T> 空数组

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].clear(); // []
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = ['a', 'b'].clear() // []
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.0/browser.html b/manual/2.0/browser.html new file mode 100644 index 0000000..7ff74e8 --- /dev/null +++ b/manual/2.0/browser.html @@ -0,0 +1,366 @@ +Browser 参考手册-参考手册

Browser 参考手册

+

属性

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
属性描述
userAgent获取浏览器 User-Agent
name获取浏览器应用程序名称
isMobile是否为移动设备
isChrome是否为 Chrome 浏览器
isFirefox是否为 Firefox 浏览器
isMozilla是否为 Mozilla 浏览器
isMSIE是否为 IE 浏览器
isOpera是否为 Opera 浏览器
isSafari是否为 Safari 浏览器
isNetscape是否为 Netscape 浏览器
+
+

readonly userAgent

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:获取浏览器 User-Agent,等价于 navigator.userAgent

    +
  • +
  • +

    返回值:string 浏览器 User-Agent

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.userAgent; // Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: String = window.browser.userAgent // Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0
+  }
+});
+</script>
+
+

readonly name

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:获取浏览器应用程序名称,等价于 navigator.appName

    +
  • +
  • +

    返回值:string 浏览器应用程序名称

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.name; // Netscape
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: String = window.browser.name // Netscape
+  }
+});
+</script>
+
+

readonly isMobile

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为移动设备,检测依据:User-Agent 中含有 Android、iPhone、iPod、Windows Phone、Mobile、Coolpad、mmp、SmartPhone、midp、wap、xoom、Symbian、J2ME、Blackberry、Wince 其中任意一个字符串

    +
  • +
  • +

    返回值:boolean 是移动设备返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isMobile
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isMobile
+  }
+});
+</script>
+
+

readonly isChrome

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 Chrome 浏览器

    +
  • +
  • +

    返回值:boolean 是 Chrome 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isChrome;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isChrome
+  }
+});
+</script>
+
+

readonly isFirefox

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 Firefox 浏览器

    +
  • +
  • +

    返回值:boolean 是 Firefox 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isFirefox;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isFirefox
+  }
+});
+</script>
+
+

readonly isMSIE

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 IE 浏览器

    +
  • +
  • +

    返回值:boolean 是 IE 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isMSIE;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isMSIE
+  }
+});
+</script>
+
+

readonly isOpera

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 Opera 浏览器

    +
  • +
  • +

    返回值:boolean 是 Opera 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isOpera;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isOpera
+  }
+});
+</script>
+
+

readonly isSafari

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 Safari 浏览器

    +
  • +
  • +

    返回值:boolean 是 Safari 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isSafari;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isSafari
+  }
+});
+</script>
+
+

readonly isNetscape

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 Netscape 浏览器

    +
  • +
  • +

    返回值:boolean 是 Netscape 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isNetscape;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isNetscape
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.0/date.html b/manual/2.0/date.html new file mode 100644 index 0000000..dff1777 --- /dev/null +++ b/manual/2.0/date.html @@ -0,0 +1,287 @@ +Date 参考手册-参考手册

Date 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
isLeapYear判断是否为闰年
getSeason获取季节
getDayOfYear获取年份中的第几天
getDaysOfYear获取年份总天数
format将日期时间格式化为字符串
+
+

isLeapYear()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断是否为闰年

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 是闰年,返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Date('2000-04-11').isLeapYear(); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new Date('2000-04-11').isLeapYear() // false
+  }
+});
+</script>
+
+

getSeason()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取季节

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:number 依次返回 0 至 3 的整数,表示春季、夏季、秋季、冬季

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Date('2000-04-11').isLeapYear(); // 0
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new Date('2022-01-11').isLeapYear() // 3
+  }
+});
+</script>
+
+

getDayOfYear()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取年份中的第几天

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:number 年份中的第几天

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Date('2022-02-11').getDayOfYear(); // 42
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: number = new Date('2022-03-01').getDayOfYear(); // 61
+  }
+});
+</script>
+
+

getDaysOfYear()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取年份总天数

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:number 年份总天数

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Date('2022-02-11').getDaysOfYear(); // 365
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: number = new Date('2020-02-11').getDaysOfYear() // 366
+  }
+});
+</script>
+
+

format(format: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:将日期时间格式化为字符串

    +
  • +
  • +

    参数:format - String format 格式字符串

    +
      y - 年
    +
    +  n - 季度(1 到 4)
    +
    +  N - 季度名称
    +
    +  A - 季度中文名称
    +
    +  M - 月
    +
    +  f - 月(Jan 到 Dec)
    +
    +  F - 月(January 到 December)
    +
    +  C - 月,中文名称
    +
    +  d - 日
    +
    +  Y - 年份中的第几天(0 到 365)
    +
    +  T - 月份有几天(28 到 30)
    +
    +  j - 每月天数后面的英文后缀(st,nd,rd 或者 th)
    +
    +  e - 星期几,数字表示,0(表示星期天)到 6(表示星期六)
    +
    +  E - 星期几,数字表示,1(表示星期一)到 7(表示星期天)
    +
    +  l - 星期几,文本表示,3 个字母(Mon 到 Sun)
    +
    +  L - 星期几,完整的文本格式(Sunday 到 Saturday)
    +
    +  w - 星期几,中文名称
    +
    +  W - 一月中第几个星期几
    +
    +  i - 月份中的第几周
    +
    +  o - 年份中的第几周
    +
    +  h - 小时(1~12)
    +
    +  H - 小时(0~23)
    +
    +  m - 分
    +
    +  s - 秒
    +
    +  S - 毫秒
    +
    +  a - 上午/下午标记
    +
    +  O - 与格林威治时间相差的小时数
    +
    +  P - 与格林威治时间相差的小时数,小时和分钟之间有冒号分隔
    +  
    +  Z - 时区
    +
    +
  • +
  • +

    返回值:string 格式化后的日期时间

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Date('2022-01-11').format("f-dd,yyyy"); // Jan-11,2022
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new Date('2022-01-11').format("f-dd,yy"); // Jan-11,22
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.0/document.html b/manual/2.0/document.html new file mode 100644 index 0000000..34b971f --- /dev/null +++ b/manual/2.0/document.html @@ -0,0 +1,238 @@ +Document 参考手册-参考手册

Document 参考手册

+

属性

+ + + + + + + + + + + + + + + + + + + + + + + + + +
属性描述
fullScreen检测当前文档是否全屏
fullScreenEnabled检测当前浏览器是否支持全屏模式
fullScreenElement检测当前文档中正在以全屏模式显示的 Element 节点
fullScreen检测当前文档是否全屏
+

方法

+ + + + + + + + + + + + + + + + + +
方法描述
requestFullscreen请求进入全屏模式
exitFullscreen退出全屏模式
+
+

readonly fullScreen

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:检测当前文档是否全屏

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 当前文档是否全屏,返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.fullScreen;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = document.fullScreen;
+  }
+});
+</script>
+
+

readonly fullScreenEnabled

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:检测当前浏览器是否支持全屏模式

    +
  • +
  • +

    返回值:boolean 当前浏览器是否支持全屏模式返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.fullScreenEnabled;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = document.fullScreenEnabled
+  }
+});
+</script>
+
+

readonly fullScreenElement

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:检测当前文档中正在以全屏模式显示的 Element 节点

    +
  • +
  • +

    返回值:boolean 当前文档中正在以全屏模式显示的 Element 节点,返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.fullScreenElement;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = document.fullScreenElement
+  }
+});
+</script>
+
+

requestFullscreen()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:请求进入全屏模式

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Promise Promise

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.requestFullscreen();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: Promise<void> = document.requestFullscreen()
+  }
+});
+</script>
+
+

exitFullscreen()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:退出全屏模式

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Promise Promise

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.exitFullscreen();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: Promise<void> = document.exitFullscreen()
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.0/function.html b/manual/2.0/function.html new file mode 100644 index 0000000..c932ee7 --- /dev/null +++ b/manual/2.0/function.html @@ -0,0 +1,121 @@ +Function 参考手册-参考手册

Function 参考手册

+

方法

+ + + + + + + + + + + + + + + + + +
方法描述
argumentNames获取函数参数名称
delay延时执行函数
+
+

argumentNames(...args: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取函数参数名称

    +
  • +
  • +

    参数:args - any 1个或多个任意类型的可变参数可变参数

    +
  • +
  • +

    返回值:string[] | null 函数参数名称列表

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var fn = function(a, b, c){
+
+  }
+  var result = fn.argumentNames();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const fn = function(a: boolean, b: number, c: String) {
+
+    }
+    const result: string[] | null = fn.argumentNames()
+  }
+});
+</script>
+
+

delay(timeout: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:延时执行函数

    +
  • +
  • +

    参数:timeout - number 延时时间(单位:秒)

    +
  • +
  • +

    返回值:any 函数返回值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var fn = function(a, b, c){
+    return a + b + c;
+  }
+  var result = fn.delay(3)
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const fn = function(a: boolean, b: number, c: number) {
+      return a ? b : c
+    }
+    const result: any = fn.delay(3)
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.0/index.html b/manual/2.0/index.html new file mode 100644 index 0000000..e270122 --- /dev/null +++ b/manual/2.0/index.html @@ -0,0 +1,30 @@ +API-参考手册
\ No newline at end of file diff --git a/manual/2.0/location.html b/manual/2.0/location.html new file mode 100644 index 0000000..3a159c2 --- /dev/null +++ b/manual/2.0/location.html @@ -0,0 +1,109 @@ +Location 参考手册-参考手册

Location 参考手册

+

方法

+ + + + + + + + + + + + + + + + + +
方法描述
getParameters获取所有的请求参数及值
getParameter获取指定请求参数的值
+
+

getParameters()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取所有的请求参数及值

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Record<string, any> 当前请求 URL 中的所有的请求参数及值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = location.getParameters();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: Record<string, any> = location.getParameters()
+  }
+});
+</script>
+
+

getParameter(name: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取指定请求参数的值

    +
  • +
  • +

    参数:string 参数名称

    +
  • +
  • +

    返回值:any 请求参数的值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = location.getParameter("action");
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: any = location.getParameter('action');
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.0/math.html b/manual/2.0/math.html new file mode 100644 index 0000000..8d1abf4 --- /dev/null +++ b/manual/2.0/math.html @@ -0,0 +1,70 @@ +Function 参考手册-参考手册

Function 参考手册

+

方法

+ + + + + + + + + + + + + +
方法描述
rand延时执行函数
+
+

rand(min: number, max?: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:产生一个指定范围内的随机数

    +
  • +
  • +

    参数:min - number 返回的最低值
    +           max - number 返回的最高值

    +
  • +
  • +

    返回值:number 随机数

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Math.rand(1, 5); //
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: number = Math.rand(1, 5)
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.0/number.html b/manual/2.0/number.html new file mode 100644 index 0000000..7f1f123 --- /dev/null +++ b/manual/2.0/number.html @@ -0,0 +1,197 @@ +Number 参考手册-参考手册

Number 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
toPaddedString延时执行函数
isOdd判断数字是否为奇数
isEven判断数字是否为偶数
isBetween判断一个数字是否在另两个数字之间
+
+

toPaddedString(length: number, radix: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:数字填充

    +
  • +
  • +

    参数:length - number 长度
    +           radix - number 进制

    +
  • +
  • +

    返回值:string 填充后的字符串数字

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Number(5).toPaddedString(12, 2); // 0000000000101
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new Number(5).toPaddedString(12, 8) // 0000000000005
+  }
+});
+</script>
+
+

isOdd(num: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断数字是否为奇数

    +
  • +
  • +

    参数:num - number 需要判断的数字

    +
  • +
  • +

    返回值:boolean 数字是为奇数返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Number.isOdd(255); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Number.isOdd(256) // false
+  }
+});
+</script>
+
+

isEven(num: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断数字是否为偶数

    +
  • +
  • +

    参数:num - number 需要判断的数字

    +
  • +
  • +

    返回值:boolean 数字是为偶数返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Number.isEven(255); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Number.isOdd(256) // true
+  }
+});
+</script>
+
+

isBetween(num: number, min: number, max: number, match?: boolean | undefined)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断一个数字是否在另两个数字之间

    +
  • +
  • +

    参数:num - number 需要判断的数字
    +           min - number 最小值
    +           max - number 最大值
    +           match - boolean | undefined 是否包含最小值或最大值

    +
  • +
  • +

    返回值:boolean 数字是否在另两个数字之间,返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Number.isBetween(4, 3, 5); // true
+  var result = Number.isBetween(4, 4, 5); // false
+  var result = Number.isBetween(4, 4, 5, true); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Number.isBetween(4, 3, 5) // true
+    const result: boolean = Number.isBetween(4, 4, 5) // false
+    const result: boolean = Number.isBetween(4, 4, 5, true) // true
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.0/object.html b/manual/2.0/object.html new file mode 100644 index 0000000..8b88e2a --- /dev/null +++ b/manual/2.0/object.html @@ -0,0 +1,949 @@ +Object 参考手册-参考手册

Object 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
type获取对象数据类型
rawType获取对象原始数据类型
isObject判断对象是否为 object 类型
isPlainObject判断对象是否为简单 object 类型
isMap判断对象是否为 Map 类型
isSet判断对象是否为 Set 类型
isSymbol判断对象是否为 Symbol
isPromise判断对象是否为 Promise
isPrimitive判断对象是否为原始类型
isFunction判断对象是否为函数
isArray判断对象是否为数组
isString判断对象是否为字符串对象
isNumber判断对象是否为数字对象
isBoolean判断对象是否为布尔对象
isRegExp判断对象是否为正则对象
isFile判断对象是否为文件对象
isWindow判断对象是否为 windows 对象
isElement判断对象是否为 Element
isEvent判断对象是否为事件对象
isNull判断对象是否为 null 对象
isUndefined判断对象是否为未定义
isUndefinedOrNull判断对象是否为未定义或 null
clone克隆对象
+
+

type(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取对象数据类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:string 对象数据类型

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.type(true); // boolean
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = Object.type(4.4) // number
+  }
+});
+</script>
+
+

rawType(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取对象原始数据类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:string 原始数据类型

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.type("4.4"); // String
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = Object.type(4.4) // Number
+  }
+});
+</script>
+
+

isObject(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 object 类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为 object 类型返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isObject("1"); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isObject(new String("1")) // true
+  }
+});
+</script>
+
+

isPlainObject(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为简单 object 类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为简单 object 类型返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isPlainObject(new String("1")); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isPlainObject({"a":"A"}) // true
+  }
+});
+</script>
+
+

isMap(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 Map 类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为 Map 类型返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isMap(new Map()); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isMap({"a":"A"}) // false
+  }
+});
+</script>
+
+

isSet(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 Map 类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为 Set 类型返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isSet(new Set()); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isSet({"a":"A"}) // false
+  }
+});
+</script>
+
+

isSymbol(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 Symbol

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为 Symbol 返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isSymbol(Symbol('a')); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isSymbol({"a":"A"}) // false
+  }
+});
+</script>
+
+

isPromise(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 Promise

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为 Promise 返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isPromise(new Promise(function(){})); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isPromise({"a":"A"}) // false
+  }
+});
+</script>
+
+

isPrimitive(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为原始类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为原始类型返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isPrimitive(11); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isPromise({"a":"A"}) // false
+  }
+});
+</script>
+
+

isFunction(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为函数

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为函数返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isFunction(location.href); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isFunction("a".replace) // true
+  }
+});
+</script>
+
+

isArray(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为数组

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为数组返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isArray([1, 2]); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isArray({"a":"A"}) // false
+  }
+});
+</script>
+
+

isString(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为字符串对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为字符串返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isString(1); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isString("1") // true
+  }
+});
+</script>
+
+

isNumber(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为数字对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为数字对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isNumber(1.0); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isNumber("1.0") // false
+  }
+});
+</script>
+
+

isBoolean(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为布尔对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为布尔对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isBoolean(false); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isBoolean(1) // false
+  }
+});
+</script>
+
+

isRegExp(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为正则对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为正则对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isRegExp(/^[a-z]$/); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isRegExp('/^[a-z]$/') // false
+  }
+});
+</script>
+
+

isFile(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为文件对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为文件对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isFile(new File(['text1', 'text2'], 'test.txt', {type: 'text/plain'})); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = bject.isFile(document) // false
+  }
+});
+</script>
+
+

isWindow(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 windows 对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为 windows 对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isWindow(window); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isWindow(document) // false
+  }
+});
+</script>
+
+

isElement(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 Element

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为 Element 返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isElement(document); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isElement(document.body) // false
+  }
+});
+</script>
+
+

isEvent(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为事件对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为事件对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isEvent(document.onclick); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isEvent(document.onclick) // false
+  }
+});
+</script>
+
+

isNull(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 null

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为 null 返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isNull(null); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isNull("A") // false
+  }
+});
+</script>
+
+

isUndefined(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为未定义

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为未定义返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isUndefined(a); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isUndefined(b) // true
+  }
+});
+</script>
+
+

isUndefinedOrNull(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为未定义或 null

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为未定义或 null 返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isUndefinedOrNull(a); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isUndefinedOrNull(document.body) // false
+  }
+});
+</script>
+
+

clone(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:克隆对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:any 新对象实例

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.clone({"a": "A"}); // {"a": "A"}
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: any = Object.clone({"a":"A"}) // {"a": "A"}
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.0/optional.html b/manual/2.0/optional.html new file mode 100644 index 0000000..46f1908 --- /dev/null +++ b/manual/2.0/optional.html @@ -0,0 +1,282 @@ +Optional 参考手册-参考手册

Optional 参考手册

+

Optional 类是一个可以为 null 或 undefined 的容器对象,如果值 value 存在则 isPresent() 方法会返回 true,调用 get() 方法会返回 value 的值。 +其设计思想,参考 java8 的 Optional

+

使用方式,在构造函数中传入任意类型值;Optional 提供很多有用的方法,这样我们就不用显式进行 null 值和 undefined 的检测。

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
of返回一个指定 T 类型的值的 Optional 实例
ofNullable如果为非 null 或 undefined,返回 Optional 描述的指定值的实例,否则返回空的 Optional 实例
empty返回空的 Optional 实例
get如果 value 不为 null 或 undefined,则返回 value 的值;否则抛出异常
orElse如果 value 不为 null 或 undefined,则返回 value 的值;否则返回 other
isPresent如果 value 不为 null 或 undefined,则返回 true;否则返回 false
+
+
<script type="text/javascript">
+  var optional = new Optional(any value);
+</script>
+
+

static of(value: T)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回一个指定 T 类型的值的 Optional 实例

    +
  • +
  • +

    参数:value - any of T 任意类型的值

    +
  • +
  • +

    返回值:Object T 类型的值的 Optional 实例

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  Optional.of(11);
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: boolean = Optional.<boolean>of(false)
+  }
+});
+</script>
+
+

static ofNullable(value: T)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:如果为非 null 或 undefined,返回 Optional 描述的指定值的实例,否则返回空的 Optional 实例

    +
  • +
  • +

    参数:value - any as T 任意类型的值

    +
  • +
  • +

    返回值:Object T 类型的值的 Optional 实例,或空的 Optional 实例

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  Optional.ofNullable('js');
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: number = Optional.<number>ofNullable(11)
+  }
+});
+</script>
+
+

static empty()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回空的 Optional 实例

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Object as Optional 空的 Optional 实例

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  Optional.empty();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: null Optional.<null>empty()
+  }
+});
+</script>
+
+

get()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:如果 value 不为 null 或 undefined,则返回 value 的值;否则抛出异常

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:any as T Optional 中包含这个值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var optional = Optional.of(11);
+  var result = optional.get(); // 11
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: number = Optional.<number>of(11)
+    const result = optional.get() // 11
+  }
+});
+</script>
+
+

orElse(other: T)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:如果 value 不为 null 或 undefined,则返回 value 的值;否则返回 other

    +
  • +
  • +

    参数:other - any of T 任意类型的值

    +
  • +
  • +

    返回值:any as T value 不为 null 或 undefined,则返回 value 的值;否则返回 other

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var optional = Optional.of(null);
+  var result = optional.orElse("abc"); // abc
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: boolean = Optional.<boolean>of(undefined)
+    const result = optional.orElse(false) // false
+  }
+});
+</script>
+
+

isPresent()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:如果 value 不为 null 或 undefined,则返回 true;否则返回 false

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean value 不为 null 或 undefined,则返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var optional = Optional.of(null);
+  var result = optional.isPresent(); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: number = Optional.<number>of(11)
+    const result = optional.isPresent() // true
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.0/prototype.html b/manual/2.0/prototype.html new file mode 100644 index 0000000..dc1697c --- /dev/null +++ b/manual/2.0/prototype.html @@ -0,0 +1,157 @@ +Prototype 参考手册-参考手册

Prototype 参考手册

+

属性

+ + + + + + + + + + + + + +
属性描述
version获取 Buession Prototype 版本
+

方法

+ + + + + + + + + + + + + + + + + +
方法描述
emptyFunction执行一个空方法
K返回参数传递的任意值
+
+

version

+
    +
  • +

    类型:String

    +
  • +
  • +

    功能描述:获取 Buession Prototype 版本

    +
  • +
  • +

    返回值:Buession Prototype 版本

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var ver = Prototype.version;
+</script>
+
+

vue

+
<template>
+  <div>
+    <div>Prototype 版本:{Prototype.version}</div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+  }
+});
+</script>
+
+

emptyFunction()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:执行一个空方法

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:void

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  Prototype.emptyFunction();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    Prototype.emptyFunction()
+  }
+});
+</script>
+
+

K(x: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回参数传递的任意值

    +
  • +
  • +

    参数:x - any 任意值

    +
  • +
  • +

    返回值:any 参数传递的任意值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var v = Prototype.K(object);
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const v: any = Prototype.K(object)
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.0/string.html b/manual/2.0/string.html new file mode 100644 index 0000000..947b454 --- /dev/null +++ b/manual/2.0/string.html @@ -0,0 +1,1039 @@ +String 参考手册-参考手册

String 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
exists判断字符串是否存在
equals判断字符串是否相等
equalsIgnoreCase判断字符串是否相等,不考虑大小写
isEmpty判断是否为空字符串
isNotEmpty判断是否不为空字符串
isBlank判断是否为空白字符串
repeat重复一个字符串
left截取字符串左边边指定数目的字符串
right截取字符串右边指定数目的字符串
truncation截取字符串,超出部分用 truncation 替代
ltrim删除字符串开头的空白字符
rtrim删除字符串结尾的空白字符
startsWith判断字符串是否以给定的字符串开头
endsWith判断字符串是否以给定的字符串结尾
lcfirst首字母小写
ucfirst首字母大写
escapeHTML将 HTML 编码
unescapeHTML将 HTML 实体字符解码
stripTag删除 HTML 标签
stripTags批量删除 HTML 标签
stripScripts删除 script 标签
toArray将字符串转换为数组
inspect返回一个数组的字符串表示形式
hashCode获取字符串 hash code
random生成随机字符串
+
+

exists(str: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断字符串是否存在

    +
  • +
  • +

    参数:str - string 子字符串

    +
  • +
  • +

    返回值:boolean 子字符串存在返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "ABC".exists("A"); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = "ABC".exists("a") // false
+  }
+});
+</script>
+
+

equals(str: string | undefined | null)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断字符串是否相等

    +
  • +
  • +

    参数:str - string | undefined | null 与此 String 进行比较的对象

    +
  • +
  • +

    返回值:boolean 字符串相等返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "A".equals(new String("A")); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = "A".equals("a") // false
+  }
+});
+</script>
+
+

equalsIgnoreCase(str: string | undefined | null)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断字符串是否相等,不考虑大小写

    +
  • +
  • +

    参数:str - string | undefined | null 与此 String 进行比较的对象

    +
  • +
  • +

    返回值:boolean 字符串相等返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "A".equalsIgnoreCase("a"); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("a").equalsIgnoreCase("1") // false
+  }
+});
+</script>
+
+

isEmpty()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断是否为空字符串

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 字符串为空,即长度为 0 返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = " ".isEmpty(); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("").isEmpty() // true
+  }
+});
+</script>
+
+

isNotEmpty()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断是否不为空字符串

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 字符串不为空,即长度大于 0 返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = " ".isNotEmpty(); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("").isNotEmpty() // false
+  }
+});
+</script>
+
+

isBlank()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断是否为空白字符串

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 字符串全为空白字符串(即:空格、回车、Tag 制表位、非打印字符)返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = " ".isBlank(); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("\t\n").isBlank() // true
+  }
+});
+</script>
+
+

repeat(count: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:重复一个字符串

    +
  • +
  • +

    参数:count - number 重复次数

    +
  • +
  • +

    返回值:string 重复后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "A".repeat(3); // AAA
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "Abc".repeat(3) // AbcAbcAbc
+  }
+});
+</script>
+
+

left(length: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:截取字符串左边边指定数目的字符串

    +
  • +
  • +

    参数:length - number 截取长度

    +
  • +
  • +

    返回值:string 子字符串,length 如果为负数,则返回空字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".left(1); // A
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "Abc".left(-1) // ""
+  }
+});
+</script>
+
+

right(length: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:截截取字符串右边指定数目的字符串

    +
  • +
  • +

    参数:length - number 截取长度

    +
  • +
  • +

    返回值:string 子字符串,length 如果为负数,则返回空字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".right(1); // c
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "Abc".right(-1) // ""
+  }
+});
+</script>
+
+

truncation(length: number, truncation: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:截取字符串,超出部分用 truncation 替代

    +
  • +
  • +

    参数:length - number 截取长度

    +
  • +
+

             truncation - string 替换字符串

+
    +
  • 返回值:string 截取后的字符串;实际截取长度:当 length 小于等于 truncation 的长度时为,length;当 length 大于 truncation 的长度时为,length - truncation.length
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".truncation(1, "..."); // A...
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "Abc".truncation(6, "...") // Abc
+  }
+});
+</script>
+
+

ltrim()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:删除字符串开头的空白字符(包括:空格、制表位、换行以及其它非打印字符)

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:string 删除了字符串最左边的空白字符的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = " Abc".ltrim(); // "Abc"
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new String(" Abc ").ltrim() // "Abc "
+  }
+});
+</script>
+
+

rtrim()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:删除字符串结尾的空白字符(包括:空格、制表位、换行以及其它非打印字符)

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:string 删除了字符串最右边的空白字符的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = " Abc".rtrim(); // " Abc"
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new String(" Abc ").rtrim() // " Abc"
+  }
+});
+</script>
+
+

startsWith(str: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断字符串是否以给定的字符串开头

    +
  • +
  • +

    参数:str - string 搜索的字符串

    +
  • +
  • +

    返回值:boolean 字符串是否以给定的字符串开头返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".startsWith("a"); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("aBc").startsWith("a") // true
+  }
+});
+</script>
+
+

endsWith(str: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断字符串是否以给定的字符串结尾

    +
  • +
  • +

    参数:str - string 搜索的字符串

    +
  • +
  • +

    返回值:boolean 字符串是否以给定的字符串结尾返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".endsWith("C"); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("aBc").endsWith("c") // true
+  }
+});
+</script>
+
+

lcfirst()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:首字母小写

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:string 首字母小写后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".lcfirst(); // "abc"
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new String("abc").lcfirst() // "abc"
+  }
+});
+</script>
+
+

ucfirst()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:首字母大写

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:string 首字母大写后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "abc".ucfirst(); // "Abc"
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new String("abc").lcfirst() // "Abc"
+  }
+});
+</script>
+
+

escapeHTML()

+ +

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "<a href='https://www.domain.com'>test</a>".escapeHTML(); // &lt;a href='https://www.domain.com'&gt;test&lt;/a&gt;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new String("<a href='https://www.domain.com'>test</a>").lcfirst() // &lt;a href='https://www.domain.com'&gt;test&lt;/a&gt;
+  }
+});
+</script>
+
+

unescapeHTML()

+ +

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "&lt;a href='https://www.domain.com'&gt;test&lt;/a&gt;".unescapeHTML(); // <a href='https://www.domain.com'>test</a>
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "&lt;a href='https://www.domain.com'&gt;test&lt;/a&gt;".unescapeHTML() // <a href='https://www.domain.com'>test</a>
+  }
+});
+</script>
+
+

stripTag(tag: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:删除 HTML 标签

    +
  • +
  • +

    参数:tag - string 待删除标签

    +
  • +
  • +

    返回值:string 删除标签后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "<a href='https://www.domain.com'>test</a><i></i>".stripTag("a"); // test<i></i>
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "<a href='https://www.domain.com'>test</a><i></i>".stripTag("a") // test<i></i>
+  }
+});
+</script>
+
+

stripTags(tag: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:批量删除 HTML 标签

    +
  • +
  • +

    参数:tag - string[] | string 删除指定的标签

    +
  • +
  • +

    返回值:string 删除标签后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "<a href='https://www.domain.com'>test</a><i></i><em>EM</em>".stripTags(["a", "i"]); // test<em>EM</em>
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "<a href='https://www.domain.com'>test</a><i></i><em>EM</em>".stripTags(["a", "i"]) // test<em>EM</em>
+  }
+});
+</script>
+
+

stripScripts()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:删除 script 标签

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:string 删除 script 标签后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = '<script type="text/javascript">alert("test");</script>test'.stripScripts(); // test
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = '<script type="text/javascript">alert("test");</script>test'.stripScripts() // <test
+  }
+});
+</script>
+
+

toArray(delimiter: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:将字符串转换为数组

    +
  • +
  • +

    参数:delimiter - string 分隔字符

    +
  • +
  • +

    返回值:string[] 字符串数组

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "a|b|c".toArray('|'); // [ "a", "b", "c" ]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = "a|b||c".toArray('||') // [ "a|b", "c" ]
+  }
+});
+</script>
+
+

inspect(useDoubleQuotes: boolean)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回一个数组的字符串表示形式

    +
  • +
  • +

    参数:useDoubleQuotes - boolean 是否使用双引号引住

    +
  • +
  • +

    返回值:string 数组的字符串表示形式

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "a|b|c".inspect(true); // \"a|b|c\"
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "a|b|c".inspect(false) // 'a|b|c'
+  }
+});
+</script>
+
+

hashCode()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取字符串 hash code

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:number 字符串的 hash code

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "abc".hashCode(); // 96354
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: number = "abcABC".hashCode() // 2870546592
+  }
+});
+</script>
+
+

random(length: number, type?: RandomType = "NUMERIC" | "LETTER" | "LETTER_NUMERIC" | "CHINESE" | undefined)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:生成随机字符串

    +
  • +
  • +

    参数:length - number 生成字符串的长度

    +
  • +
+

             type - NUMERIC | LETTER | LETTER_NUMERIC | CHINESE | undefined 生成类型,可选参数,当未指定时为 LETTER_NUMERIC

+
    NUMERIC      - 数字随机字符串
+
+    LETTER       - 英文随机字符串
+
+    LETTER_NUMERIC - 英文数字混合随机字符串
+
+    CHINESE      - 中文随机字符串
+
+
    +
  • 返回值:string 随机字符串
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = String.random(6); // 1Diim2
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = String.random(6, "NUMERIC") // 881773
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.0/try.html b/manual/2.0/try.html new file mode 100644 index 0000000..243eeaf --- /dev/null +++ b/manual/2.0/try.html @@ -0,0 +1,81 @@ +Try 参考手册-参考手册

Try 参考手册

+

方法

+ + + + + + + + + + + + + +
方法描述
these接收任意数目的函数作为参数,返回第一个执行成功的函数(未抛出异常的函数)的结果
+
+

these(args: any[])

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:接收任意数目的函数作为参数,返回第一个执行成功的函数(未抛出异常的函数)的结果

    +
  • +
  • +

    参数:args any[] 一个或多个 function 作为参数

    +
  • +
  • +

    返回值:any 任意函数参数执行结果

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Try.these(function(){
+
+    },
+
+    function() {
+
+  });
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result:any = Try.these(function(){
+
+      },
+
+      function() {
+
+    })
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.0/window.html b/manual/2.0/window.html new file mode 100644 index 0000000..e1030c8 --- /dev/null +++ b/manual/2.0/window.html @@ -0,0 +1,90 @@ +Window 参考手册-参考手册

Window 参考手册

+

属性

+ + + + + + + + + + + + + + + + + +
属性描述
browser浏览器信息对象
locationLocation 对象
+

方法

+ + + + + + + + + + + + + +
方法描述
copy将字符串复制到剪贴板
+
+

copy(str: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:将字符串复制到剪贴板

    +
  • +
  • +

    参数:str - string 字符串

    +
  • +
  • +

    返回值:无

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  window.copy("这是要复制的字符串");
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    window.copy("这是要复制的字符串")
+  }
+});
+</script>
+
+

Browser

+

Location

+
\ No newline at end of file diff --git a/manual/2.1/array.html b/manual/2.1/array.html new file mode 100644 index 0000000..3d3c0e2 --- /dev/null +++ b/manual/2.1/array.html @@ -0,0 +1,514 @@ +Array 参考手册-参考手册

Array 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
isEmpty判断数组是否为空数组
exists判断元素 item 是否在数组中
first获取数组第一个元素
last获取数组最后一个元素
each按顺序为数组中的每个元素调用一次函数
size获取数组大小
merge连接两个或多个数组
compact返回一个不包含 null/undefined 值元素的数组的新版本
unique对数组的元素进行去重
without返回不包括参数中任意一个指定值的数组
clone克隆数组
clear清空数组
+
+

isEmpty()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断数组是否为空数组

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 数组为空,返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = [].isEmpty(); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = ['a', 'b', 'c'].isEmpty() // false
+  }
+});
+</script>
+
+

exists(item: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断元素 item 是否在数组中

    +
  • +
  • +

    参数:item - any 待检测元素

    +
  • +
  • +

    返回值:boolean 元素 item 是否在数组中返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].exists('a'); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = ['1', '2'].exists(2) // false
+  }
+});
+</script>
+
+

first()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取数组第一个元素

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:any 数组第一个元素

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].first(); // a
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = [1, 2].first() // 1
+  }
+});
+</script>
+
+

last()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取数组最后一个元素

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:any 数组最后一个元素

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].last(); // b
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = [1, 2].last() // 2
+  }
+});
+</script>
+
+

each(callback: (value: T, index: number, array: readonly T[]) => void, thisArg?: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:按顺序为数组中的每个元素调用一次函数,forEach的别名

    +
  • +
  • +

    参数:callback - (value: T, index: number, array: readonly T[]) => void as Function callback 为数组中的每个元素运行的函数,其中:value 为前元素的值,index 为当前元素的数组索引,array 为当前元素所属的数组对象 +any thisArg 可选。要传递给函数以用作其 "this" 值的值,如果此参数为空,则值 "undefined" 将作为其 "this" 值传递

    +
  • +
  • +

    返回值:void

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  ['a', 'b'].each(function (currentValue) {
+      console.log(currentValue)
+  });
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    ['a', 'b'].each(function (currentValue) {
+      console.log(currentValue)
+    })
+  }
+});
+</script>
+
+

size()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取数组大小

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:number 数组大小

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].size(); // 2
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: number = [].size() // 0
+  }
+});
+</script>
+
+

merge(...items: T[])

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:连接两个或多个数组

    +
  • +
  • +

    参数:items - any as T 待连接的 T 类型的数组

    +
  • +
  • +

    返回值:Array<T> 已连接数组的副本

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = [1, 3].merge(2, 4); // [1, 3, 2, 4]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    console result: string[] = ['a', 'b'].merge('c', 'd') // [a, b, c, d]
+  }
+});
+</script>
+
+

compact()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回一个不包含 null/undefined 值元素的数组的新版本

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Array<T> 不包含 null/undefined 值元素的数组的新版本

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b', null, 'c', 'd'].compact(); // [a, b, c, d]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = ['a', 'b', null, 'c', 'd', undefined].compact() // [a, b, c, d]
+  }
+});
+</script>
+
+

unique()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:对数组的元素进行去重

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Array<T> 数组元素进行去重后的新版本

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b', 'c', 'd', 'b', 'd'].unique(); // [a, b, c, d]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = ['a', 'b', 'c', 'c', 'd'].unique() // [a, b, c, d]
+  }
+});
+</script>
+
+

without(values: T[])

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回不包括参数中任意一个指定值的数组

    +
  • +
  • +

    参数:values - any as T[] 排除值数组

    +
  • +
  • +

    返回值:Array<T> 不包括参数中任意一个指定值的数组

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b', 'c', 'd', 'b', 'd'].without('a', 'b'); // [c, d]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = ['a', 'b', 'c', 'd', 'b', 'd'].without('a', 'b') // [c, d]
+  }
+});
+</script>
+
+

clone()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:克隆数组

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Array<T> 克隆结果

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].clone(); // [a, b]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = ['a', 'b'].clone() // [a, b]
+  }
+});
+</script>
+
+

clear()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:清空数组

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Array<T> 空数组

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].clear(); // []
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = ['a', 'b'].clear() // []
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.1/browser.html b/manual/2.1/browser.html new file mode 100644 index 0000000..639dd4a --- /dev/null +++ b/manual/2.1/browser.html @@ -0,0 +1,366 @@ +HttpCookie 参考手册-参考手册

HttpCookie 参考手册

+

属性

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
属性描述
userAgent获取浏览器 User-Agent
name获取浏览器应用程序名称
isMobile是否为移动设备
isChrome是否为 Chrome 浏览器
isFirefox是否为 Firefox 浏览器
isMozilla是否为 Mozilla 浏览器
isMSIE是否为 IE 浏览器
isOpera是否为 Opera 浏览器
isSafari是否为 Safari 浏览器
isNetscape是否为 Netscape 浏览器
+
+

readonly userAgent

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:获取浏览器 User-Agent,等价于 navigator.userAgent

    +
  • +
  • +

    返回值:string 浏览器 User-Agent

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.userAgent; // Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: String = window.browser.userAgent // Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0
+  }
+});
+</script>
+
+

readonly name

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:获取浏览器应用程序名称,等价于 navigator.appName

    +
  • +
  • +

    返回值:string 浏览器应用程序名称

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.name; // Netscape
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: String = window.browser.name // Netscape
+  }
+});
+</script>
+
+

readonly isMobile

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为移动设备,检测依据:User-Agent 中含有 Android、iPhone、iPod、Windows Phone、Mobile、Coolpad、mmp、SmartPhone、midp、wap、xoom、Symbian、J2ME、Blackberry、Wince 其中任意一个字符串

    +
  • +
  • +

    返回值:boolean 是移动设备返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isMobile
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isMobile
+  }
+});
+</script>
+
+

readonly isChrome

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 Chrome 浏览器

    +
  • +
  • +

    返回值:boolean 是 Chrome 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isChrome;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isChrome
+  }
+});
+</script>
+
+

readonly isFirefox

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 Firefox 浏览器

    +
  • +
  • +

    返回值:boolean 是 Firefox 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isFirefox;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isFirefox
+  }
+});
+</script>
+
+

readonly isMSIE

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 IE 浏览器

    +
  • +
  • +

    返回值:boolean 是 IE 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isMSIE;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isMSIE
+  }
+});
+</script>
+
+

readonly isOpera

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 Opera 浏览器

    +
  • +
  • +

    返回值:boolean 是 Opera 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isOpera;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isOpera
+  }
+});
+</script>
+
+

readonly isSafari

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 Safari 浏览器

    +
  • +
  • +

    返回值:boolean 是 Safari 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isSafari;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isSafari
+  }
+});
+</script>
+
+

readonly isNetscape

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 Netscape 浏览器

    +
  • +
  • +

    返回值:boolean 是 Netscape 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isNetscape;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isNetscape
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.1/cookie.html b/manual/2.1/cookie.html new file mode 100644 index 0000000..0a68990 --- /dev/null +++ b/manual/2.1/cookie.html @@ -0,0 +1,152 @@ +Cookie 参考手册-参考手册

Cookie 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + +
方法描述
[set](cookie.html#setname-string,-value-string--null-
get获取 Cookie
delete删除 Cookie
+
+

set(name: string, value: string | null | undefined, options?: CookieOptions)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:设置 Cookie

    +
  • +
  • +

    参数:name - string Cookie 名称 +           value - string | null | undefined Cookie 值 +           options - CookieOptions Cookie 选项

    +
  • +
  • +

    返回值:string Cookie 字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.httpCookie.set("name", "测试");
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string | null = document.httpCookie.set("name", "测试", {path: '/', domain: '*.test.com'})
+  }
+});
+</script>
+
+

get(name: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取 Cookie 值

    +
  • +
  • +

    参数:name - string Cookie 名称

    +
  • +
  • +

    返回值:string | null Cookie 值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.httpCookie.get("name")
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string | null = document.httpCookie.get("name")
+  }
+});
+</script>
+
+

delete(name: string, options?: CookieOptions)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:删除 Cookie

    +
  • +
  • +

    参数:name - string Cookie 名称 +           options - CookieOptions Cookie 选项

    +
  • +
  • +

    返回值:无

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.httpCookie.delete("name");
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    document.httpCookie.delete("name", "测试", {domain: '*.test.com'})
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.1/date.html b/manual/2.1/date.html new file mode 100644 index 0000000..6ae8533 --- /dev/null +++ b/manual/2.1/date.html @@ -0,0 +1,287 @@ +Date 参考手册-参考手册

Date 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
isLeapYear判断是否为闰年
getSeason获取季节
getDayOfYear获取年份中的第几天
getDaysOfYear获取年份总天数
format将日期时间格式化为字符串
+
+

isLeapYear()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断是否为闰年

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 是闰年,返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Date('2000-04-11').isLeapYear(); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new Date('2000-04-11').isLeapYear() // false
+  }
+});
+</script>
+
+

getSeason()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取季节

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:number 依次返回 0 至 3 的整数,表示春季、夏季、秋季、冬季

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Date('2000-04-11').isLeapYear(); // 0
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new Date('2022-01-11').isLeapYear() // 3
+  }
+});
+</script>
+
+

getDayOfYear()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取年份中的第几天

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:number 年份中的第几天

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Date('2022-02-11').getDayOfYear(); // 42
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: number = new Date('2022-03-01').getDayOfYear(); // 61
+  }
+});
+</script>
+
+

getDaysOfYear()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取年份总天数

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:number 年份总天数

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Date('2022-02-11').getDaysOfYear(); // 365
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: number = new Date('2020-02-11').getDaysOfYear() // 366
+  }
+});
+</script>
+
+

format(format: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:将日期时间格式化为字符串

    +
  • +
  • +

    参数:format - String format 格式字符串

    +
      y - 年
    +
    +  n - 季度(1 到 4)
    +
    +  N - 季度名称
    +
    +  A - 季度中文名称
    +
    +  M - 月
    +
    +  f - 月(Jan 到 Dec)
    +
    +  F - 月(January 到 December)
    +
    +  C - 月,中文名称
    +
    +  d - 日
    +
    +  Y - 年份中的第几天(0 到 365)
    +
    +  T - 月份有几天(28 到 30)
    +
    +  j - 每月天数后面的英文后缀(st,nd,rd 或者 th)
    +
    +  e - 星期几,数字表示,0(表示星期天)到 6(表示星期六)
    +
    +  E - 星期几,数字表示,1(表示星期一)到 7(表示星期天)
    +
    +  l - 星期几,文本表示,3 个字母(Mon 到 Sun)
    +
    +  L - 星期几,完整的文本格式(Sunday 到 Saturday)
    +
    +  w - 星期几,中文名称
    +
    +  W - 一月中第几个星期几
    +
    +  i - 月份中的第几周
    +
    +  o - 年份中的第几周
    +
    +  h - 小时(1~12)
    +
    +  H - 小时(0~23)
    +
    +  m - 分
    +
    +  s - 秒
    +
    +  S - 毫秒
    +
    +  a - 上午/下午标记
    +
    +  O - 与格林威治时间相差的小时数
    +
    +  P - 与格林威治时间相差的小时数,小时和分钟之间有冒号分隔
    +  
    +  Z - 时区
    +
    +
  • +
  • +

    返回值:string 格式化后的日期时间

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Date('2022-01-11').format("f-dd,yyyy"); // Jan-11,2022
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new Date('2022-01-11').format("f-dd,yy"); // Jan-11,22
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.1/document.html b/manual/2.1/document.html new file mode 100644 index 0000000..62de0df --- /dev/null +++ b/manual/2.1/document.html @@ -0,0 +1,242 @@ +Document 参考手册-参考手册

Document 参考手册

+

属性

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
属性描述
fullScreen检测当前文档是否全屏
fullScreenEnabled检测当前浏览器是否支持全屏模式
fullScreenElement检测当前文档中正在以全屏模式显示的 Element 节点
fullScreen检测当前文档是否全屏
httpCookieCookie 对象操作
+

方法

+ + + + + + + + + + + + + + + + + +
方法描述
requestFullscreen请求进入全屏模式
exitFullscreen退出全屏模式
+
+

readonly fullScreen

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:检测当前文档是否全屏

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 当前文档是否全屏,返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.fullScreen;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = document.fullScreen;
+  }
+});
+</script>
+
+

readonly fullScreenEnabled

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:检测当前浏览器是否支持全屏模式

    +
  • +
  • +

    返回值:boolean 当前浏览器是否支持全屏模式返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.fullScreenEnabled;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = document.fullScreenEnabled
+  }
+});
+</script>
+
+

readonly fullScreenElement

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:检测当前文档中正在以全屏模式显示的 Element 节点

    +
  • +
  • +

    返回值:boolean 当前文档中正在以全屏模式显示的 Element 节点,返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.fullScreenElement;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = document.fullScreenElement
+  }
+});
+</script>
+
+

requestFullscreen()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:请求进入全屏模式

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Promise Promise

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.requestFullscreen();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: Promise<void> = document.requestFullscreen()
+  }
+});
+</script>
+
+

exitFullscreen()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:退出全屏模式

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Promise Promise

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.exitFullscreen();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: Promise<void> = document.exitFullscreen()
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.1/function.html b/manual/2.1/function.html new file mode 100644 index 0000000..799c779 --- /dev/null +++ b/manual/2.1/function.html @@ -0,0 +1,121 @@ +Function 参考手册-参考手册

Function 参考手册

+

方法

+ + + + + + + + + + + + + + + + + +
方法描述
argumentNames获取函数参数名称
delay延时执行函数
+
+

argumentNames(...args: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取函数参数名称

    +
  • +
  • +

    参数:args - any 1个或多个任意类型的可变参数可变参数

    +
  • +
  • +

    返回值:string[] | null 函数参数名称列表

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var fn = function(a, b, c){
+
+  }
+  var result = fn.argumentNames();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const fn = function(a: boolean, b: number, c: String) {
+
+    }
+    const result: string[] | null = fn.argumentNames()
+  }
+});
+</script>
+
+

delay(timeout: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:延时执行函数

    +
  • +
  • +

    参数:timeout - number 延时时间(单位:秒)

    +
  • +
  • +

    返回值:any 函数返回值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var fn = function(a, b, c){
+    return a + b + c;
+  }
+  var result = fn.delay(3)
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const fn = function(a: boolean, b: number, c: number) {
+      return a ? b : c
+    }
+    const result: any = fn.delay(3)
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.1/index.html b/manual/2.1/index.html new file mode 100644 index 0000000..4ea48b3 --- /dev/null +++ b/manual/2.1/index.html @@ -0,0 +1,30 @@ +API-参考手册
\ No newline at end of file diff --git a/manual/2.1/location.html b/manual/2.1/location.html new file mode 100644 index 0000000..827a850 --- /dev/null +++ b/manual/2.1/location.html @@ -0,0 +1,109 @@ +Location 参考手册-参考手册

Location 参考手册

+

方法

+ + + + + + + + + + + + + + + + + +
方法描述
getParameters获取所有的请求参数及值
getParameter获取指定请求参数的值
+
+

getParameters()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取所有的请求参数及值

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Record<string, any> 当前请求 URL 中的所有的请求参数及值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = location.getParameters();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: Record<string, any> = location.getParameters()
+  }
+});
+</script>
+
+

getParameter(name: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取指定请求参数的值

    +
  • +
  • +

    参数:string 参数名称

    +
  • +
  • +

    返回值:any 请求参数的值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = location.getParameter("action");
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: any = location.getParameter('action');
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.1/math.html b/manual/2.1/math.html new file mode 100644 index 0000000..5044dc8 --- /dev/null +++ b/manual/2.1/math.html @@ -0,0 +1,70 @@ +Function 参考手册-参考手册

Function 参考手册

+

方法

+ + + + + + + + + + + + + +
方法描述
rand延时执行函数
+
+

rand(min: number, max?: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:产生一个指定范围内的随机数

    +
  • +
  • +

    参数:min - number 返回的最低值 +           max - number 返回的最高值

    +
  • +
  • +

    返回值:number 随机数

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Math.rand(1, 5); //
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: number = Math.rand(1, 5)
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.1/number.html b/manual/2.1/number.html new file mode 100644 index 0000000..e7b5adf --- /dev/null +++ b/manual/2.1/number.html @@ -0,0 +1,197 @@ +Number 参考手册-参考手册

Number 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
toPaddedString延时执行函数
isOdd判断数字是否为奇数
isEven判断数字是否为偶数
isBetween判断一个数字是否在另两个数字之间
+
+

toPaddedString(length: number, radix: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:数字填充

    +
  • +
  • +

    参数:length - number 长度
    +           radix - number 进制

    +
  • +
  • +

    返回值:string 填充后的字符串数字

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Number(5).toPaddedString(12, 2); // 0000000000101
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new Number(5).toPaddedString(12, 8) // 0000000000005
+  }
+});
+</script>
+
+

isOdd(num: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断数字是否为奇数

    +
  • +
  • +

    参数:num - number 需要判断的数字

    +
  • +
  • +

    返回值:boolean 数字是为奇数返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Number.isOdd(255); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Number.isOdd(256) // false
+  }
+});
+</script>
+
+

isEven(num: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断数字是否为偶数

    +
  • +
  • +

    参数:num - number 需要判断的数字

    +
  • +
  • +

    返回值:boolean 数字是为偶数返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Number.isEven(255); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Number.isOdd(256) // true
+  }
+});
+</script>
+
+

isBetween(num: number, min: number, max: number, match?: boolean | undefined)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断一个数字是否在另两个数字之间

    +
  • +
  • +

    参数:num - number 需要判断的数字
    +           min - number 最小值
    +           max - number 最大值
    +           match - boolean | undefined 是否包含最小值或最大值

    +
  • +
  • +

    返回值:boolean 数字是否在另两个数字之间,返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Number.isBetween(4, 3, 5); // true
+  var result = Number.isBetween(4, 4, 5); // false
+  var result = Number.isBetween(4, 4, 5, true); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Number.isBetween(4, 3, 5) // true
+    const result: boolean = Number.isBetween(4, 4, 5) // false
+    const result: boolean = Number.isBetween(4, 4, 5, true) // true
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.1/object.html b/manual/2.1/object.html new file mode 100644 index 0000000..e489a88 --- /dev/null +++ b/manual/2.1/object.html @@ -0,0 +1,949 @@ +Object 参考手册-参考手册

Object 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
type获取对象数据类型
rawType获取对象原始数据类型
isObject判断对象是否为 object 类型
isPlainObject判断对象是否为简单 object 类型
isMap判断对象是否为 Map 类型
isSet判断对象是否为 Set 类型
isSymbol判断对象是否为 Symbol
isPromise判断对象是否为 Promise
isPrimitive判断对象是否为原始类型
isFunction判断对象是否为函数
isArray判断对象是否为数组
isString判断对象是否为字符串对象
isNumber判断对象是否为数字对象
isBoolean判断对象是否为布尔对象
isRegExp判断对象是否为正则对象
isFile判断对象是否为文件对象
isWindow判断对象是否为 windows 对象
isElement判断对象是否为 Element
isEvent判断对象是否为事件对象
isNull判断对象是否为 null 对象
isUndefined判断对象是否为未定义
isUndefinedOrNull判断对象是否为未定义或 null
clone克隆对象
+
+

type(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取对象数据类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:string 对象数据类型

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.type(true); // boolean
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = Object.type(4.4) // number
+  }
+});
+</script>
+
+

rawType(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取对象原始数据类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:string 原始数据类型

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.type("4.4"); // String
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = Object.type(4.4) // Number
+  }
+});
+</script>
+
+

isObject(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 object 类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为 object 类型返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isObject("1"); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isObject(new String("1")) // true
+  }
+});
+</script>
+
+

isPlainObject(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为简单 object 类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为简单 object 类型返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isPlainObject(new String("1")); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isPlainObject({"a":"A"}) // true
+  }
+});
+</script>
+
+

isMap(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 Map 类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为 Map 类型返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isMap(new Map()); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isMap({"a":"A"}) // false
+  }
+});
+</script>
+
+

isSet(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 Map 类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为 Set 类型返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isSet(new Set()); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isSet({"a":"A"}) // false
+  }
+});
+</script>
+
+

isSymbol(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 Symbol

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为 Symbol 返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isSymbol(Symbol('a')); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isSymbol({"a":"A"}) // false
+  }
+});
+</script>
+
+

isPromise(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 Promise

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为 Promise 返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isPromise(new Promise(function(){})); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isPromise({"a":"A"}) // false
+  }
+});
+</script>
+
+

isPrimitive(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为原始类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为原始类型返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isPrimitive(11); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isPromise({"a":"A"}) // false
+  }
+});
+</script>
+
+

isFunction(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为函数

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为函数返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isFunction(location.href); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isFunction("a".replace) // true
+  }
+});
+</script>
+
+

isArray(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为数组

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为数组返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isArray([1, 2]); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isArray({"a":"A"}) // false
+  }
+});
+</script>
+
+

isString(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为字符串对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为字符串返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isString(1); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isString("1") // true
+  }
+});
+</script>
+
+

isNumber(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为数字对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为数字对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isNumber(1.0); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isNumber("1.0") // false
+  }
+});
+</script>
+
+

isBoolean(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为布尔对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为布尔对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isBoolean(false); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isBoolean(1) // false
+  }
+});
+</script>
+
+

isRegExp(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为正则对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为正则对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isRegExp(/^[a-z]$/); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isRegExp('/^[a-z]$/') // false
+  }
+});
+</script>
+
+

isFile(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为文件对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为文件对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isFile(new File(['text1', 'text2'], 'test.txt', {type: 'text/plain'})); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = bject.isFile(document) // false
+  }
+});
+</script>
+
+

isWindow(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 windows 对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为 windows 对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isWindow(window); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isWindow(document) // false
+  }
+});
+</script>
+
+

isElement(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 Element

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为 Element 返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isElement(document); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isElement(document.body) // false
+  }
+});
+</script>
+
+

isEvent(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为事件对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为事件对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isEvent(document.onclick); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isEvent(document.onclick) // false
+  }
+});
+</script>
+
+

isNull(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 null

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为 null 返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isNull(null); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isNull("A") // false
+  }
+});
+</script>
+
+

isUndefined(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为未定义

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为未定义返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isUndefined(a); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isUndefined(b) // true
+  }
+});
+</script>
+
+

isUndefinedOrNull(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为未定义或 null

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为未定义或 null 返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isUndefinedOrNull(a); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isUndefinedOrNull(document.body) // false
+  }
+});
+</script>
+
+

clone(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:克隆对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:any 新对象实例

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.clone({"a": "A"}); // {"a": "A"}
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: any = Object.clone({"a":"A"}) // {"a": "A"}
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.1/optional.html b/manual/2.1/optional.html new file mode 100644 index 0000000..034cd7f --- /dev/null +++ b/manual/2.1/optional.html @@ -0,0 +1,282 @@ +Optional 参考手册-参考手册

Optional 参考手册

+

Optional 类是一个可以为 null 或 undefined 的容器对象,如果值 value 存在则 isPresent() 方法会返回 true,调用 get() 方法会返回 value 的值。 +其设计思想,参考 java8 的 Optional

+

使用方式,在构造函数中传入任意类型值;Optional 提供很多有用的方法,这样我们就不用显式进行 null 值和 undefined 的检测。

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
of返回一个指定 T 类型的值的 Optional 实例
ofNullable如果为非 null 或 undefined,返回 Optional 描述的指定值的实例,否则返回空的 Optional 实例
empty返回空的 Optional 实例
get如果 value 不为 null 或 undefined,则返回 value 的值;否则抛出异常
orElse如果 value 不为 null 或 undefined,则返回 value 的值;否则返回 other
isPresent如果 value 不为 null 或 undefined,则返回 true;否则返回 false
+
+
<script type="text/javascript">
+  var optional = new Optional(any value);
+</script>
+
+

static of(value: T)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回一个指定 T 类型的值的 Optional 实例

    +
  • +
  • +

    参数:value - any of T 任意类型的值

    +
  • +
  • +

    返回值:Object T 类型的值的 Optional 实例

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  Optional.of(11);
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: boolean = Optional.<boolean>of(false)
+  }
+});
+</script>
+
+

static ofNullable(value: T)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:如果为非 null 或 undefined,返回 Optional 描述的指定值的实例,否则返回空的 Optional 实例

    +
  • +
  • +

    参数:value - any as T 任意类型的值

    +
  • +
  • +

    返回值:Object T 类型的值的 Optional 实例,或空的 Optional 实例

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  Optional.ofNullable('js');
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: number = Optional.<number>ofNullable(11)
+  }
+});
+</script>
+
+

static empty()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回空的 Optional 实例

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Object as Optional 空的 Optional 实例

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  Optional.empty();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: null Optional.<null>empty()
+  }
+});
+</script>
+
+

get()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:如果 value 不为 null 或 undefined,则返回 value 的值;否则抛出异常

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:any as T Optional 中包含这个值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var optional = Optional.of(11);
+  var result = optional.get(); // 11
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: number = Optional.<number>of(11)
+    const result = optional.get() // 11
+  }
+});
+</script>
+
+

orElse(other: T)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:如果 value 不为 null 或 undefined,则返回 value 的值;否则返回 other

    +
  • +
  • +

    参数:other - any of T 任意类型的值

    +
  • +
  • +

    返回值:any as T value 不为 null 或 undefined,则返回 value 的值;否则返回 other

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var optional = Optional.of(null);
+  var result = optional.orElse("abc"); // abc
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: boolean = Optional.<boolean>of(undefined)
+    const result = optional.orElse(false) // false
+  }
+});
+</script>
+
+

isPresent()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:如果 value 不为 null 或 undefined,则返回 true;否则返回 false

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean value 不为 null 或 undefined,则返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var optional = Optional.of(null);
+  var result = optional.isPresent(); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: number = Optional.<number>of(11)
+    const result = optional.isPresent() // true
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.1/prototype.html b/manual/2.1/prototype.html new file mode 100644 index 0000000..18da738 --- /dev/null +++ b/manual/2.1/prototype.html @@ -0,0 +1,157 @@ +Prototype 参考手册-参考手册

Prototype 参考手册

+

属性

+ + + + + + + + + + + + + +
属性描述
version获取 Buession Prototype 版本
+

方法

+ + + + + + + + + + + + + + + + + +
方法描述
emptyFunction执行一个空方法
K返回参数传递的任意值
+
+

version

+
    +
  • +

    类型:String

    +
  • +
  • +

    功能描述:获取 Buession Prototype 版本

    +
  • +
  • +

    返回值:Buession Prototype 版本

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var ver = Prototype.version;
+</script>
+
+

vue

+
<template>
+  <div>
+    <div>Prototype 版本:{Prototype.version}</div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+  }
+});
+</script>
+
+

emptyFunction()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:执行一个空方法

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:void

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  Prototype.emptyFunction();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    Prototype.emptyFunction()
+  }
+});
+</script>
+
+

K(x: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回参数传递的任意值

    +
  • +
  • +

    参数:x - any 任意值

    +
  • +
  • +

    返回值:any 参数传递的任意值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var v = Prototype.K(object);
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const v: any = Prototype.K(object)
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.1/string.html b/manual/2.1/string.html new file mode 100644 index 0000000..4306b40 --- /dev/null +++ b/manual/2.1/string.html @@ -0,0 +1,1039 @@ +String 参考手册-参考手册

String 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
exists判断字符串是否存在
equals判断字符串是否相等
equalsIgnoreCase判断字符串是否相等,不考虑大小写
isEmpty判断是否为空字符串
isNotEmpty判断是否不为空字符串
isBlank判断是否为空白字符串
repeat重复一个字符串
left截取字符串左边边指定数目的字符串
right截取字符串右边指定数目的字符串
truncation截取字符串,超出部分用 truncation 替代
ltrim删除字符串开头的空白字符
rtrim删除字符串结尾的空白字符
startsWith判断字符串是否以给定的字符串开头
endsWith判断字符串是否以给定的字符串结尾
lcfirst首字母小写
ucfirst首字母大写
escapeHTML将 HTML 编码
unescapeHTML将 HTML 实体字符解码
stripTag删除 HTML 标签
stripTags批量删除 HTML 标签
stripScripts删除 script 标签
toArray将字符串转换为数组
inspect返回一个数组的字符串表示形式
hashCode获取字符串 hash code
random生成随机字符串
+
+

exists(str: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断字符串是否存在

    +
  • +
  • +

    参数:str - string 子字符串

    +
  • +
  • +

    返回值:boolean 子字符串存在返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "ABC".exists("A"); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = "ABC".exists("a") // false
+  }
+});
+</script>
+
+

equals(str: string | undefined | null)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断字符串是否相等

    +
  • +
  • +

    参数:str - string | undefined | null 与此 String 进行比较的对象

    +
  • +
  • +

    返回值:boolean 字符串相等返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "A".equals(new String("A")); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = "A".equals("a") // false
+  }
+});
+</script>
+
+

equalsIgnoreCase(str: string | undefined | null)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断字符串是否相等,不考虑大小写

    +
  • +
  • +

    参数:str - string | undefined | null 与此 String 进行比较的对象

    +
  • +
  • +

    返回值:boolean 字符串相等返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "A".equalsIgnoreCase("a"); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("a").equalsIgnoreCase("1") // false
+  }
+});
+</script>
+
+

isEmpty()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断是否为空字符串

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 字符串为空,即长度为 0 返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = " ".isEmpty(); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("").isEmpty() // true
+  }
+});
+</script>
+
+

isNotEmpty()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断是否不为空字符串

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 字符串不为空,即长度大于 0 返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = " ".isNotEmpty(); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("").isNotEmpty() // false
+  }
+});
+</script>
+
+

isBlank()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断是否为空白字符串

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 字符串全为空白字符串(即:空格、回车、Tag 制表位、非打印字符)返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = " ".isBlank(); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("\t\n").isBlank() // true
+  }
+});
+</script>
+
+

repeat(count: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:重复一个字符串

    +
  • +
  • +

    参数:count - number 重复次数

    +
  • +
  • +

    返回值:string 重复后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "A".repeat(3); // AAA
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "Abc".repeat(3) // AbcAbcAbc
+  }
+});
+</script>
+
+

left(length: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:截取字符串左边边指定数目的字符串

    +
  • +
  • +

    参数:length - number 截取长度

    +
  • +
  • +

    返回值:string 子字符串,length 如果为负数,则返回空字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".left(1); // A
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "Abc".left(-1) // ""
+  }
+});
+</script>
+
+

right(length: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:截截取字符串右边指定数目的字符串

    +
  • +
  • +

    参数:length - number 截取长度

    +
  • +
  • +

    返回值:string 子字符串,length 如果为负数,则返回空字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".right(1); // c
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "Abc".right(-1) // ""
+  }
+});
+</script>
+
+

truncation(length: number, truncation: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:截取字符串,超出部分用 truncation 替代

    +
  • +
  • +

    参数:length - number 截取长度

    +
  • +
+

             truncation - string 替换字符串

+
    +
  • 返回值:string 截取后的字符串;实际截取长度:当 length 小于等于 truncation 的长度时为,length;当 length 大于 truncation 的长度时为,length - truncation.length
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".truncation(1, "..."); // A...
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "Abc".truncation(6, "...") // Abc
+  }
+});
+</script>
+
+

ltrim()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:删除字符串开头的空白字符(包括:空格、制表位、换行以及其它非打印字符)

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:string 删除了字符串最左边的空白字符的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = " Abc".ltrim(); // "Abc"
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new String(" Abc ").ltrim() // "Abc "
+  }
+});
+</script>
+
+

rtrim()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:删除字符串结尾的空白字符(包括:空格、制表位、换行以及其它非打印字符)

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:string 删除了字符串最右边的空白字符的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = " Abc".rtrim(); // " Abc"
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new String(" Abc ").rtrim() // " Abc"
+  }
+});
+</script>
+
+

startsWith(str: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断字符串是否以给定的字符串开头

    +
  • +
  • +

    参数:str - string 搜索的字符串

    +
  • +
  • +

    返回值:boolean 字符串是否以给定的字符串开头返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".startsWith("a"); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("aBc").startsWith("a") // true
+  }
+});
+</script>
+
+

endsWith(str: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断字符串是否以给定的字符串结尾

    +
  • +
  • +

    参数:str - string 搜索的字符串

    +
  • +
  • +

    返回值:boolean 字符串是否以给定的字符串结尾返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".endsWith("C"); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("aBc").endsWith("c") // true
+  }
+});
+</script>
+
+

lcfirst()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:首字母小写

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:string 首字母小写后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".lcfirst(); // "abc"
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new String("abc").lcfirst() // "abc"
+  }
+});
+</script>
+
+

ucfirst()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:首字母大写

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:string 首字母大写后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "abc".ucfirst(); // "Abc"
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new String("abc").lcfirst() // "Abc"
+  }
+});
+</script>
+
+

escapeHTML()

+ +

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "<a href='https://www.domain.com'>test</a>".escapeHTML(); // &lt;a href='https://www.domain.com'&gt;test&lt;/a&gt;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new String("<a href='https://www.domain.com'>test</a>").lcfirst() // &lt;a href='https://www.domain.com'&gt;test&lt;/a&gt;
+  }
+});
+</script>
+
+

unescapeHTML()

+ +

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "&lt;a href='https://www.domain.com'&gt;test&lt;/a&gt;".unescapeHTML(); // <a href='https://www.domain.com'>test</a>
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "&lt;a href='https://www.domain.com'&gt;test&lt;/a&gt;".unescapeHTML() // <a href='https://www.domain.com'>test</a>
+  }
+});
+</script>
+
+

stripTag(tag: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:删除 HTML 标签

    +
  • +
  • +

    参数:tag - string 待删除标签

    +
  • +
  • +

    返回值:string 删除标签后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "<a href='https://www.domain.com'>test</a><i></i>".stripTag("a"); // test<i></i>
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "<a href='https://www.domain.com'>test</a><i></i>".stripTag("a") // test<i></i>
+  }
+});
+</script>
+
+

stripTags(tag: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:批量删除 HTML 标签

    +
  • +
  • +

    参数:tag - string[] | string 删除指定的标签

    +
  • +
  • +

    返回值:string 删除标签后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "<a href='https://www.domain.com'>test</a><i></i><em>EM</em>".stripTags(["a", "i"]); // test<em>EM</em>
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "<a href='https://www.domain.com'>test</a><i></i><em>EM</em>".stripTags(["a", "i"]) // test<em>EM</em>
+  }
+});
+</script>
+
+

stripScripts()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:删除 script 标签

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:string 删除 script 标签后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = '<script type="text/javascript">alert("test");</script>test'.stripScripts(); // test
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = '<script type="text/javascript">alert("test");</script>test'.stripScripts() // <test
+  }
+});
+</script>
+
+

toArray(delimiter: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:将字符串转换为数组

    +
  • +
  • +

    参数:delimiter - string 分隔字符

    +
  • +
  • +

    返回值:string[] 字符串数组

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "a|b|c".toArray('|'); // [ "a", "b", "c" ]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = "a|b||c".toArray('||') // [ "a|b", "c" ]
+  }
+});
+</script>
+
+

inspect(useDoubleQuotes: boolean)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回一个数组的字符串表示形式

    +
  • +
  • +

    参数:useDoubleQuotes - boolean 是否使用双引号引住

    +
  • +
  • +

    返回值:string 数组的字符串表示形式

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "a|b|c".inspect(true); // \"a|b|c\"
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "a|b|c".inspect(false) // 'a|b|c'
+  }
+});
+</script>
+
+

hashCode()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取字符串 hash code

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:number 字符串的 hash code

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "abc".hashCode(); // 96354
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: number = "abcABC".hashCode() // 2870546592
+  }
+});
+</script>
+
+

random(length: number, type?: RandomType = "NUMERIC" | "LETTER" | "LETTER_NUMERIC" | "CHINESE" | undefined)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:生成随机字符串

    +
  • +
  • +

    参数:length - number 生成字符串的长度

    +
  • +
+

             type - NUMERIC | LETTER | LETTER_NUMERIC | CHINESE | undefined 生成类型,可选参数,当未指定时为 LETTER_NUMERIC

+
    NUMERIC      - 数字随机字符串
+
+    LETTER       - 英文随机字符串
+
+    LETTER_NUMERIC - 英文数字混合随机字符串
+
+    CHINESE      - 中文随机字符串
+
+
    +
  • 返回值:string 随机字符串
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = String.random(6); // 1Diim2
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = String.random(6, "NUMERIC") // 881773
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.1/try.html b/manual/2.1/try.html new file mode 100644 index 0000000..4800e99 --- /dev/null +++ b/manual/2.1/try.html @@ -0,0 +1,81 @@ +Try 参考手册-参考手册

Try 参考手册

+

方法

+ + + + + + + + + + + + + +
方法描述
these接收任意数目的函数作为参数,返回第一个执行成功的函数(未抛出异常的函数)的结果
+
+

these(args: any[])

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:接收任意数目的函数作为参数,返回第一个执行成功的函数(未抛出异常的函数)的结果

    +
  • +
  • +

    参数:args any[] 一个或多个 function 作为参数

    +
  • +
  • +

    返回值:any 任意函数参数执行结果

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Try.these(function(){
+
+    },
+
+    function() {
+
+  });
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result:any = Try.these(function(){
+
+      },
+
+      function() {
+
+    })
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.1/window.html b/manual/2.1/window.html new file mode 100644 index 0000000..3559a55 --- /dev/null +++ b/manual/2.1/window.html @@ -0,0 +1,90 @@ +Window 参考手册-参考手册

Window 参考手册

+

属性

+ + + + + + + + + + + + + + + + + +
属性描述
browser浏览器信息对象
locationLocation 对象
+

方法

+ + + + + + + + + + + + + +
方法描述
copy将字符串复制到剪贴板
+
+

copy(str: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:将字符串复制到剪贴板

    +
  • +
  • +

    参数:str - string 字符串

    +
  • +
  • +

    返回值:无

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  window.copy("这是要复制的字符串");
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    window.copy("这是要复制的字符串")
+  }
+});
+</script>
+
+

Browser

+

Location

+
\ No newline at end of file diff --git a/manual/2.2/array.html b/manual/2.2/array.html new file mode 100644 index 0000000..14410fb --- /dev/null +++ b/manual/2.2/array.html @@ -0,0 +1,514 @@ +Array 参考手册-参考手册

Array 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
isEmpty判断数组是否为空数组
exists判断元素 item 是否在数组中
first获取数组第一个元素
last获取数组最后一个元素
each按顺序为数组中的每个元素调用一次函数
size获取数组大小
merge连接两个或多个数组
compact返回一个不包含 null/undefined 值元素的数组的新版本
unique对数组的元素进行去重
without返回不包括参数中任意一个指定值的数组
clone克隆数组
clear清空数组
+
+

isEmpty()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断数组是否为空数组

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 数组为空,返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = [].isEmpty(); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = ['a', 'b', 'c'].isEmpty() // false
+  }
+});
+</script>
+
+

exists(item: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断元素 item 是否在数组中

    +
  • +
  • +

    参数:item - any 待检测元素

    +
  • +
  • +

    返回值:boolean 元素 item 是否在数组中返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].exists('a'); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = ['1', '2'].exists(2) // false
+  }
+});
+</script>
+
+

first()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取数组第一个元素

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:any 数组第一个元素

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].first(); // a
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = [1, 2].first() // 1
+  }
+});
+</script>
+
+

last()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取数组最后一个元素

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:any 数组最后一个元素

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].last(); // b
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = [1, 2].last() // 2
+  }
+});
+</script>
+
+

each(callback: (value: T, index: number, array: readonly T[]) => void, thisArg?: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:按顺序为数组中的每个元素调用一次函数,forEach的别名

    +
  • +
  • +

    参数:callback - (value: T, index: number, array: readonly T[]) => void as Function callback 为数组中的每个元素运行的函数,其中:value 为前元素的值,index 为当前元素的数组索引,array 为当前元素所属的数组对象 +any thisArg 可选。要传递给函数以用作其 "this" 值的值,如果此参数为空,则值 "undefined" 将作为其 "this" 值传递

    +
  • +
  • +

    返回值:void

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  ['a', 'b'].each(function (currentValue) {
+      console.log(currentValue)
+  });
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    ['a', 'b'].each(function (currentValue) {
+      console.log(currentValue)
+    })
+  }
+});
+</script>
+
+

size()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取数组大小

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:number 数组大小

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].size(); // 2
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: number = [].size() // 0
+  }
+});
+</script>
+
+

merge(...items: T[])

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:连接两个或多个数组

    +
  • +
  • +

    参数:items - any as T 待连接的 T 类型的数组

    +
  • +
  • +

    返回值:Array<T> 已连接数组的副本

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = [1, 3].merge(2, 4); // [1, 3, 2, 4]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    console result: string[] = ['a', 'b'].merge('c', 'd') // [a, b, c, d]
+  }
+});
+</script>
+
+

compact()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回一个不包含 null/undefined 值元素的数组的新版本

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Array<T> 不包含 null/undefined 值元素的数组的新版本

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b', null, 'c', 'd'].compact(); // [a, b, c, d]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = ['a', 'b', null, 'c', 'd', undefined].compact() // [a, b, c, d]
+  }
+});
+</script>
+
+

unique()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:对数组的元素进行去重

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Array<T> 数组元素进行去重后的新版本

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b', 'c', 'd', 'b', 'd'].unique(); // [a, b, c, d]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = ['a', 'b', 'c', 'c', 'd'].unique() // [a, b, c, d]
+  }
+});
+</script>
+
+

without(values: T[])

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回不包括参数中任意一个指定值的数组

    +
  • +
  • +

    参数:values - any as T[] 排除值数组

    +
  • +
  • +

    返回值:Array<T> 不包括参数中任意一个指定值的数组

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b', 'c', 'd', 'b', 'd'].without('a', 'b'); // [c, d]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = ['a', 'b', 'c', 'd', 'b', 'd'].without('a', 'b') // [c, d]
+  }
+});
+</script>
+
+

clone()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:克隆数组

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Array<T> 克隆结果

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].clone(); // [a, b]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = ['a', 'b'].clone() // [a, b]
+  }
+});
+</script>
+
+

clear()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:清空数组

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Array<T> 空数组

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].clear(); // []
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = ['a', 'b'].clear() // []
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.2/browser.html b/manual/2.2/browser.html new file mode 100644 index 0000000..e5b9e0f --- /dev/null +++ b/manual/2.2/browser.html @@ -0,0 +1,366 @@ +HttpCookie 参考手册-参考手册

HttpCookie 参考手册

+

属性

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
属性描述
userAgent获取浏览器 User-Agent
name获取浏览器应用程序名称
isMobile是否为移动设备
isChrome是否为 Chrome 浏览器
isFirefox是否为 Firefox 浏览器
isMozilla是否为 Mozilla 浏览器
isMSIE是否为 IE 浏览器
isOpera是否为 Opera 浏览器
isSafari是否为 Safari 浏览器
isNetscape是否为 Netscape 浏览器
+
+

readonly userAgent

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:获取浏览器 User-Agent,等价于 navigator.userAgent

    +
  • +
  • +

    返回值:string 浏览器 User-Agent

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.userAgent; // Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: String = window.browser.userAgent // Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0
+  }
+});
+</script>
+
+

readonly name

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:获取浏览器应用程序名称,等价于 navigator.appName

    +
  • +
  • +

    返回值:string 浏览器应用程序名称

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.name; // Netscape
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: String = window.browser.name // Netscape
+  }
+});
+</script>
+
+

readonly isMobile

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为移动设备,检测依据:User-Agent 中含有 Android、iPhone、iPod、Windows Phone、Mobile、Coolpad、mmp、SmartPhone、midp、wap、xoom、Symbian、J2ME、Blackberry、Wince 其中任意一个字符串

    +
  • +
  • +

    返回值:boolean 是移动设备返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isMobile
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isMobile
+  }
+});
+</script>
+
+

readonly isChrome

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 Chrome 浏览器

    +
  • +
  • +

    返回值:boolean 是 Chrome 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isChrome;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isChrome
+  }
+});
+</script>
+
+

readonly isFirefox

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 Firefox 浏览器

    +
  • +
  • +

    返回值:boolean 是 Firefox 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isFirefox;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isFirefox
+  }
+});
+</script>
+
+

readonly isMSIE

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 IE 浏览器

    +
  • +
  • +

    返回值:boolean 是 IE 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isMSIE;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isMSIE
+  }
+});
+</script>
+
+

readonly isOpera

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 Opera 浏览器

    +
  • +
  • +

    返回值:boolean 是 Opera 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isOpera;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isOpera
+  }
+});
+</script>
+
+

readonly isSafari

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 Safari 浏览器

    +
  • +
  • +

    返回值:boolean 是 Safari 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isSafari;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isSafari
+  }
+});
+</script>
+
+

readonly isNetscape

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 Netscape 浏览器

    +
  • +
  • +

    返回值:boolean 是 Netscape 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isNetscape;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isNetscape
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.2/cookie.html b/manual/2.2/cookie.html new file mode 100644 index 0000000..eb6c16f --- /dev/null +++ b/manual/2.2/cookie.html @@ -0,0 +1,152 @@ +Cookie 参考手册-参考手册

Cookie 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + +
方法描述
[set](cookie.html#setname-string,-value-string--null-
get获取 Cookie
delete删除 Cookie
+
+

set(name: string, value: string | null | undefined, options?: CookieOptions)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:设置 Cookie

    +
  • +
  • +

    参数:name - string Cookie 名称 +           value - string | null | undefined Cookie 值 +           options - CookieOptions Cookie 选项

    +
  • +
  • +

    返回值:string Cookie 字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.httpCookie.set("name", "测试");
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string | null = document.httpCookie.set("name", "测试", {path: '/', domain: '*.test.com'})
+  }
+});
+</script>
+
+

get(name: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取 Cookie 值

    +
  • +
  • +

    参数:name - string Cookie 名称

    +
  • +
  • +

    返回值:string | null Cookie 值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.httpCookie.get("name")
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string | null = document.httpCookie.get("name")
+  }
+});
+</script>
+
+

delete(name: string, options?: CookieOptions)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:删除 Cookie

    +
  • +
  • +

    参数:name - string Cookie 名称 +           options - CookieOptions Cookie 选项

    +
  • +
  • +

    返回值:无

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.httpCookie.delete("name");
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    document.httpCookie.delete("name", "测试", {domain: '*.test.com'})
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.2/date.html b/manual/2.2/date.html new file mode 100644 index 0000000..87b9de8 --- /dev/null +++ b/manual/2.2/date.html @@ -0,0 +1,287 @@ +Date 参考手册-参考手册

Date 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
isLeapYear判断是否为闰年
getSeason获取季节
getDayOfYear获取年份中的第几天
getDaysOfYear获取年份总天数
format将日期时间格式化为字符串
+
+

isLeapYear()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断是否为闰年

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 是闰年,返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Date('2000-04-11').isLeapYear(); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new Date('2000-04-11').isLeapYear() // false
+  }
+});
+</script>
+
+

getSeason()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取季节

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:number 依次返回 0 至 3 的整数,表示春季、夏季、秋季、冬季

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Date('2000-04-11').isLeapYear(); // 0
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new Date('2022-01-11').isLeapYear() // 3
+  }
+});
+</script>
+
+

getDayOfYear()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取年份中的第几天

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:number 年份中的第几天

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Date('2022-02-11').getDayOfYear(); // 42
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: number = new Date('2022-03-01').getDayOfYear(); // 61
+  }
+});
+</script>
+
+

getDaysOfYear()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取年份总天数

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:number 年份总天数

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Date('2022-02-11').getDaysOfYear(); // 365
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: number = new Date('2020-02-11').getDaysOfYear() // 366
+  }
+});
+</script>
+
+

format(format: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:将日期时间格式化为字符串

    +
  • +
  • +

    参数:format - String format 格式字符串

    +
      y - 年
    +
    +  n - 季度(1 到 4)
    +
    +  N - 季度名称
    +
    +  A - 季度中文名称
    +
    +  M - 月
    +
    +  f - 月(Jan 到 Dec)
    +
    +  F - 月(January 到 December)
    +
    +  C - 月,中文名称
    +
    +  d - 日
    +
    +  Y - 年份中的第几天(0 到 365)
    +
    +  T - 月份有几天(28 到 30)
    +
    +  j - 每月天数后面的英文后缀(st,nd,rd 或者 th)
    +
    +  e - 星期几,数字表示,0(表示星期天)到 6(表示星期六)
    +
    +  E - 星期几,数字表示,1(表示星期一)到 7(表示星期天)
    +
    +  l - 星期几,文本表示,3 个字母(Mon 到 Sun)
    +
    +  L - 星期几,完整的文本格式(Sunday 到 Saturday)
    +
    +  w - 星期几,中文名称
    +
    +  W - 一月中第几个星期几
    +
    +  i - 月份中的第几周
    +
    +  o - 年份中的第几周
    +
    +  h - 小时(1~12)
    +
    +  H - 小时(0~23)
    +
    +  m - 分
    +
    +  s - 秒
    +
    +  S - 毫秒
    +
    +  a - 上午/下午标记
    +
    +  O - 与格林威治时间相差的小时数
    +
    +  P - 与格林威治时间相差的小时数,小时和分钟之间有冒号分隔
    +  
    +  Z - 时区
    +
    +
  • +
  • +

    返回值:string 格式化后的日期时间

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Date('2022-01-11').format("f-dd,yyyy"); // Jan-11,2022
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new Date('2022-01-11').format("f-dd,yy"); // Jan-11,22
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.2/document.html b/manual/2.2/document.html new file mode 100644 index 0000000..f61cd73 --- /dev/null +++ b/manual/2.2/document.html @@ -0,0 +1,242 @@ +Document 参考手册-参考手册

Document 参考手册

+

属性

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
属性描述
fullScreen检测当前文档是否全屏
fullScreenEnabled检测当前浏览器是否支持全屏模式
fullScreenElement检测当前文档中正在以全屏模式显示的 Element 节点
fullScreen检测当前文档是否全屏
httpCookieCookie 对象操作
+

方法

+ + + + + + + + + + + + + + + + + +
方法描述
requestFullscreen请求进入全屏模式
exitFullscreen退出全屏模式
+
+

readonly fullScreen

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:检测当前文档是否全屏

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 当前文档是否全屏,返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.fullScreen;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = document.fullScreen;
+  }
+});
+</script>
+
+

readonly fullScreenEnabled

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:检测当前浏览器是否支持全屏模式

    +
  • +
  • +

    返回值:boolean 当前浏览器是否支持全屏模式返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.fullScreenEnabled;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = document.fullScreenEnabled
+  }
+});
+</script>
+
+

readonly fullScreenElement

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:检测当前文档中正在以全屏模式显示的 Element 节点

    +
  • +
  • +

    返回值:boolean 当前文档中正在以全屏模式显示的 Element 节点,返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.fullScreenElement;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = document.fullScreenElement
+  }
+});
+</script>
+
+

requestFullscreen()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:请求进入全屏模式

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Promise Promise

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.requestFullscreen();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: Promise<void> = document.requestFullscreen()
+  }
+});
+</script>
+
+

exitFullscreen()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:退出全屏模式

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Promise Promise

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.exitFullscreen();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: Promise<void> = document.exitFullscreen()
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.2/function.html b/manual/2.2/function.html new file mode 100644 index 0000000..a49cfa9 --- /dev/null +++ b/manual/2.2/function.html @@ -0,0 +1,121 @@ +Function 参考手册-参考手册

Function 参考手册

+

方法

+ + + + + + + + + + + + + + + + + +
方法描述
argumentNames获取函数参数名称
delay延时执行函数
+
+

argumentNames(...args: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取函数参数名称

    +
  • +
  • +

    参数:args - any 1个或多个任意类型的可变参数可变参数

    +
  • +
  • +

    返回值:string[] | null 函数参数名称列表

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var fn = function(a, b, c){
+
+  }
+  var result = fn.argumentNames();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const fn = function(a: boolean, b: number, c: String) {
+
+    }
+    const result: string[] | null = fn.argumentNames()
+  }
+});
+</script>
+
+

delay(timeout: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:延时执行函数

    +
  • +
  • +

    参数:timeout - number 延时时间(单位:秒)

    +
  • +
  • +

    返回值:any 函数返回值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var fn = function(a, b, c){
+    return a + b + c;
+  }
+  var result = fn.delay(3)
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const fn = function(a: boolean, b: number, c: number) {
+      return a ? b : c
+    }
+    const result: any = fn.delay(3)
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.2/index.html b/manual/2.2/index.html new file mode 100644 index 0000000..b9b5f76 --- /dev/null +++ b/manual/2.2/index.html @@ -0,0 +1,30 @@ +API-参考手册
\ No newline at end of file diff --git a/manual/2.2/location.html b/manual/2.2/location.html new file mode 100644 index 0000000..c679dea --- /dev/null +++ b/manual/2.2/location.html @@ -0,0 +1,109 @@ +Location 参考手册-参考手册

Location 参考手册

+

方法

+ + + + + + + + + + + + + + + + + +
方法描述
getParameters获取所有的请求参数及值
getParameter获取指定请求参数的值
+
+

getParameters()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取所有的请求参数及值

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Record<string, any> 当前请求 URL 中的所有的请求参数及值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = location.getParameters();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: Record<string, any> = location.getParameters()
+  }
+});
+</script>
+
+

getParameter(name: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取指定请求参数的值

    +
  • +
  • +

    参数:string 参数名称

    +
  • +
  • +

    返回值:any 请求参数的值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = location.getParameter("action");
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: any = location.getParameter('action');
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.2/math.html b/manual/2.2/math.html new file mode 100644 index 0000000..6347586 --- /dev/null +++ b/manual/2.2/math.html @@ -0,0 +1,70 @@ +Function 参考手册-参考手册

Function 参考手册

+

方法

+ + + + + + + + + + + + + +
方法描述
rand延时执行函数
+
+

rand(min: number, max?: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:产生一个指定范围内的随机数

    +
  • +
  • +

    参数:min - number 返回的最低值 +           max - number 返回的最高值

    +
  • +
  • +

    返回值:number 随机数

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Math.rand(1, 5); //
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: number = Math.rand(1, 5)
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.2/number.html b/manual/2.2/number.html new file mode 100644 index 0000000..1e95b45 --- /dev/null +++ b/manual/2.2/number.html @@ -0,0 +1,197 @@ +Number 参考手册-参考手册

Number 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
toPaddedString延时执行函数
isOdd判断数字是否为奇数
isEven判断数字是否为偶数
isBetween判断一个数字是否在另两个数字之间
+
+

toPaddedString(length: number, radix: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:数字填充

    +
  • +
  • +

    参数:length - number 长度
    +           radix - number 进制

    +
  • +
  • +

    返回值:string 填充后的字符串数字

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Number(5).toPaddedString(12, 2); // 0000000000101
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new Number(5).toPaddedString(12, 8) // 0000000000005
+  }
+});
+</script>
+
+

isOdd(num: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断数字是否为奇数

    +
  • +
  • +

    参数:num - number 需要判断的数字

    +
  • +
  • +

    返回值:boolean 数字是为奇数返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Number.isOdd(255); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Number.isOdd(256) // false
+  }
+});
+</script>
+
+

isEven(num: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断数字是否为偶数

    +
  • +
  • +

    参数:num - number 需要判断的数字

    +
  • +
  • +

    返回值:boolean 数字是为偶数返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Number.isEven(255); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Number.isOdd(256) // true
+  }
+});
+</script>
+
+

isBetween(num: number, min: number, max: number, match?: boolean | undefined)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断一个数字是否在另两个数字之间

    +
  • +
  • +

    参数:num - number 需要判断的数字
    +           min - number 最小值
    +           max - number 最大值
    +           match - boolean | undefined 是否包含最小值或最大值

    +
  • +
  • +

    返回值:boolean 数字是否在另两个数字之间,返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Number.isBetween(4, 3, 5); // true
+  var result = Number.isBetween(4, 4, 5); // false
+  var result = Number.isBetween(4, 4, 5, true); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Number.isBetween(4, 3, 5) // true
+    const result: boolean = Number.isBetween(4, 4, 5) // false
+    const result: boolean = Number.isBetween(4, 4, 5, true) // true
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.2/object.html b/manual/2.2/object.html new file mode 100644 index 0000000..60d1e67 --- /dev/null +++ b/manual/2.2/object.html @@ -0,0 +1,1049 @@ +Object 参考手册-参考手册

Object 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
type获取对象数据类型
rawType获取对象原始数据类型
isObject判断对象是否为 object 类型
isPlainObject判断对象是否为简单 object 类型
isMap判断对象是否为 Map 类型
isSet判断对象是否为 Set 类型
isSymbol判断对象是否为 Symbol
isPromise判断对象是否为 Promise
isPrimitive判断对象是否为原始类型
isFunction判断对象是否为函数
isArray判断对象是否为数组
isString判断对象是否为字符串对象
isNumber判断对象是否为数字对象
isBoolean判断对象是否为布尔对象
isRegExp判断对象是否为正则对象
isFile判断对象是否为文件对象
isWindow判断对象是否为 windows 对象
isElement判断对象是否为 Element
isEvent判断对象是否为事件对象
isNull判断对象是否为 null 对象
isUndefined判断对象是否为未定义
isUndefinedOrNull判断对象是否为未定义或 null
equals深度判断两个对象是否相等
clone克隆对象
omit克隆对象,但支持删除指定属性
+
+

type(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取对象数据类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:string 对象数据类型

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.type(true); // boolean
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = Object.type(4.4) // number
+  }
+});
+</script>
+
+

rawType(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取对象原始数据类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:string 原始数据类型

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.type("4.4"); // String
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = Object.type(4.4) // Number
+  }
+});
+</script>
+
+

isObject(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 object 类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为 object 类型返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isObject("1"); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isObject(new String("1")) // true
+  }
+});
+</script>
+
+

isPlainObject(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为简单 object 类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为简单 object 类型返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isPlainObject(new String("1")); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isPlainObject({"a":"A"}) // true
+  }
+});
+</script>
+
+

isMap(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 Map 类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为 Map 类型返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isMap(new Map()); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isMap({"a":"A"}) // false
+  }
+});
+</script>
+
+

isSet(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 Map 类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为 Set 类型返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isSet(new Set()); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isSet({"a":"A"}) // false
+  }
+});
+</script>
+
+

isSymbol(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 Symbol

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为 Symbol 返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isSymbol(Symbol('a')); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isSymbol({"a":"A"}) // false
+  }
+});
+</script>
+
+

isPromise(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 Promise

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为 Promise 返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isPromise(new Promise(function(){})); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isPromise({"a":"A"}) // false
+  }
+});
+</script>
+
+

isPrimitive(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为原始类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为原始类型返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isPrimitive(11); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isPromise({"a":"A"}) // false
+  }
+});
+</script>
+
+

isFunction(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为函数

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为函数返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isFunction(location.href); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isFunction("a".replace) // true
+  }
+});
+</script>
+
+

isArray(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为数组

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为数组返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isArray([1, 2]); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isArray({"a":"A"}) // false
+  }
+});
+</script>
+
+

isString(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为字符串对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为字符串返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isString(1); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isString("1") // true
+  }
+});
+</script>
+
+

isNumber(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为数字对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为数字对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isNumber(1.0); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isNumber("1.0") // false
+  }
+});
+</script>
+
+

isBoolean(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为布尔对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为布尔对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isBoolean(false); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isBoolean(1) // false
+  }
+});
+</script>
+
+

isRegExp(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为正则对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为正则对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isRegExp(/^[a-z]$/); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isRegExp('/^[a-z]$/') // false
+  }
+});
+</script>
+
+

isFile(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为文件对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为文件对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isFile(new File(['text1', 'text2'], 'test.txt', {type: 'text/plain'})); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = bject.isFile(document) // false
+  }
+});
+</script>
+
+

isWindow(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 windows 对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为 windows 对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isWindow(window); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isWindow(document) // false
+  }
+});
+</script>
+
+

isElement(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 Element

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为 Element 返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isElement(document); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isElement(document.body) // false
+  }
+});
+</script>
+
+

isEvent(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为事件对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为事件对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isEvent(document.onclick); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isEvent(document.onclick) // false
+  }
+});
+</script>
+
+

isNull(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 null

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为 null 返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isNull(null); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isNull("A") // false
+  }
+});
+</script>
+
+

isUndefined(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为未定义

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为未定义返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isUndefined(a); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isUndefined(b) // true
+  }
+});
+</script>
+
+

isUndefinedOrNull(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为未定义或 null

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为未定义或 null 返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isUndefinedOrNull(a); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isUndefinedOrNull(document.body) // false
+  }
+});
+</script>
+
+

equals(obj1: any, obj2: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:深度判断两个对象是否相等

    +
  • +
  • +

    参数:obj1 - any 一个对象 +           obj2 - any 用于和 obj1 比较的对象

    +
  • +
  • +

    返回值:boolean 当两个对象相等时,返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.equals("a", "A"); // false
+  var result = Object.equals("a", "a"); // true
+  var result = Object.equals(1, 1.0); // true
+  var result = Object.equals([1], [1.0]); // true
+  var result = Object.equals([1], [1.0, 1.1]); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+  const result: boolean = Object.equals("a", "A") // false
+  const result: boolean = Object.equals("a", "a") // true
+  const result: boolean = Object.equals(1, 1.0) // true
+  const result: boolean = Object.equals([1], [1.0]) // true
+  const result: boolean = Object.equals([1], [1.0, 1.1]) // false
+  }
+});
+</script>
+
+

clone(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:克隆对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:any 新对象实例

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.clone({"a": "A"}); // {"a": "A"}
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: any = Object.clone({"a":"A"}) // {"a": "A"}
+  }
+});
+</script>
+
+

omit<T extends object, K extends keyof T>(obj: T, ...fields: K[])

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:克隆对象,但支持删除指定属性

    +
  • +
  • +

    参数:obj - object 任意对象 +           fields - K[] 需要删除的属性

    +
  • +
  • +

    返回值:any 新对象实例

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var source = {
+    id: 1,
+    name: 'buession',
+    year: 2023
+  };
+  var result = Object.omit(source, "id", "year"); // {"name": "buession"}
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+  const source = {
+    id: 1,
+    name: 'buession',
+    year: 2023
+  };
+  const result = Object.omit(source, "id", "year") // {"name": "buession"}
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.2/optional.html b/manual/2.2/optional.html new file mode 100644 index 0000000..e7cfecb --- /dev/null +++ b/manual/2.2/optional.html @@ -0,0 +1,282 @@ +Optional 参考手册-参考手册

Optional 参考手册

+

Optional 类是一个可以为 null 或 undefined 的容器对象,如果值 value 存在则 isPresent() 方法会返回 true,调用 get() 方法会返回 value 的值。 +其设计思想,参考 java8 的 Optional

+

使用方式,在构造函数中传入任意类型值;Optional 提供很多有用的方法,这样我们就不用显式进行 null 值和 undefined 的检测。

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
of返回一个指定 T 类型的值的 Optional 实例
ofNullable如果为非 null 或 undefined,返回 Optional 描述的指定值的实例,否则返回空的 Optional 实例
empty返回空的 Optional 实例
get如果 value 不为 null 或 undefined,则返回 value 的值;否则抛出异常
orElse如果 value 不为 null 或 undefined,则返回 value 的值;否则返回 other
isPresent如果 value 不为 null 或 undefined,则返回 true;否则返回 false
+
+
<script type="text/javascript">
+  var optional = new Optional(any value);
+</script>
+
+

static of(value: T)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回一个指定 T 类型的值的 Optional 实例

    +
  • +
  • +

    参数:value - any of T 任意类型的值

    +
  • +
  • +

    返回值:Object T 类型的值的 Optional 实例

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  Optional.of(11);
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: boolean = Optional.<boolean>of(false)
+  }
+});
+</script>
+
+

static ofNullable(value: T)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:如果为非 null 或 undefined,返回 Optional 描述的指定值的实例,否则返回空的 Optional 实例

    +
  • +
  • +

    参数:value - any as T 任意类型的值

    +
  • +
  • +

    返回值:Object T 类型的值的 Optional 实例,或空的 Optional 实例

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  Optional.ofNullable('js');
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: number = Optional.<number>ofNullable(11)
+  }
+});
+</script>
+
+

static empty()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回空的 Optional 实例

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Object as Optional 空的 Optional 实例

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  Optional.empty();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: null Optional.<null>empty()
+  }
+});
+</script>
+
+

get()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:如果 value 不为 null 或 undefined,则返回 value 的值;否则抛出异常

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:any as T Optional 中包含这个值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var optional = Optional.of(11);
+  var result = optional.get(); // 11
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: number = Optional.<number>of(11)
+    const result = optional.get() // 11
+  }
+});
+</script>
+
+

orElse(other: T)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:如果 value 不为 null 或 undefined,则返回 value 的值;否则返回 other

    +
  • +
  • +

    参数:other - any of T 任意类型的值

    +
  • +
  • +

    返回值:any as T value 不为 null 或 undefined,则返回 value 的值;否则返回 other

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var optional = Optional.of(null);
+  var result = optional.orElse("abc"); // abc
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: boolean = Optional.<boolean>of(undefined)
+    const result = optional.orElse(false) // false
+  }
+});
+</script>
+
+

isPresent()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:如果 value 不为 null 或 undefined,则返回 true;否则返回 false

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean value 不为 null 或 undefined,则返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var optional = Optional.of(null);
+  var result = optional.isPresent(); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: number = Optional.<number>of(11)
+    const result = optional.isPresent() // true
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.2/prototype.html b/manual/2.2/prototype.html new file mode 100644 index 0000000..534c614 --- /dev/null +++ b/manual/2.2/prototype.html @@ -0,0 +1,157 @@ +Prototype 参考手册-参考手册

Prototype 参考手册

+

属性

+ + + + + + + + + + + + + +
属性描述
version获取 Buession Prototype 版本
+

方法

+ + + + + + + + + + + + + + + + + +
方法描述
emptyFunction执行一个空方法
K返回参数传递的任意值
+
+

version

+
    +
  • +

    类型:String

    +
  • +
  • +

    功能描述:获取 Buession Prototype 版本

    +
  • +
  • +

    返回值:Buession Prototype 版本

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var ver = Prototype.version;
+</script>
+
+

vue

+
<template>
+  <div>
+    <div>Prototype 版本:{Prototype.version}</div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+  }
+});
+</script>
+
+

emptyFunction()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:执行一个空方法

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:void

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  Prototype.emptyFunction();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    Prototype.emptyFunction()
+  }
+});
+</script>
+
+

K(x: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回参数传递的任意值

    +
  • +
  • +

    参数:x - any 任意值

    +
  • +
  • +

    返回值:any 参数传递的任意值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var v = Prototype.K(object);
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const v: any = Prototype.K(object)
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.2/string.html b/manual/2.2/string.html new file mode 100644 index 0000000..d2dd92d --- /dev/null +++ b/manual/2.2/string.html @@ -0,0 +1,1039 @@ +String 参考手册-参考手册

String 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
exists判断字符串是否存在
equals判断字符串是否相等
equalsIgnoreCase判断字符串是否相等,不考虑大小写
isEmpty判断是否为空字符串
isNotEmpty判断是否不为空字符串
isBlank判断是否为空白字符串
repeat重复一个字符串
left截取字符串左边边指定数目的字符串
right截取字符串右边指定数目的字符串
truncation截取字符串,超出部分用 truncation 替代
ltrim删除字符串开头的空白字符
rtrim删除字符串结尾的空白字符
startsWith判断字符串是否以给定的字符串开头
endsWith判断字符串是否以给定的字符串结尾
lcfirst首字母小写
ucfirst首字母大写
escapeHTML将 HTML 编码
unescapeHTML将 HTML 实体字符解码
stripTag删除 HTML 标签
stripTags批量删除 HTML 标签
stripScripts删除 script 标签
toArray将字符串转换为数组
inspect返回一个数组的字符串表示形式
hashCode获取字符串 hash code
random生成随机字符串
+
+

exists(str: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断字符串是否存在

    +
  • +
  • +

    参数:str - string 子字符串

    +
  • +
  • +

    返回值:boolean 子字符串存在返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "ABC".exists("A"); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = "ABC".exists("a") // false
+  }
+});
+</script>
+
+

equals(str: string | undefined | null)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断字符串是否相等

    +
  • +
  • +

    参数:str - string | undefined | null 与此 String 进行比较的对象

    +
  • +
  • +

    返回值:boolean 字符串相等返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "A".equals(new String("A")); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = "A".equals("a") // false
+  }
+});
+</script>
+
+

equalsIgnoreCase(str: string | undefined | null)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断字符串是否相等,不考虑大小写

    +
  • +
  • +

    参数:str - string | undefined | null 与此 String 进行比较的对象

    +
  • +
  • +

    返回值:boolean 字符串相等返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "A".equalsIgnoreCase("a"); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("a").equalsIgnoreCase("1") // false
+  }
+});
+</script>
+
+

isEmpty()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断是否为空字符串

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 字符串为空,即长度为 0 返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = " ".isEmpty(); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("").isEmpty() // true
+  }
+});
+</script>
+
+

isNotEmpty()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断是否不为空字符串

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 字符串不为空,即长度大于 0 返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = " ".isNotEmpty(); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("").isNotEmpty() // false
+  }
+});
+</script>
+
+

isBlank()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断是否为空白字符串

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 字符串全为空白字符串(即:空格、回车、Tag 制表位、非打印字符)返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = " ".isBlank(); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("\t\n").isBlank() // true
+  }
+});
+</script>
+
+

repeat(count: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:重复一个字符串

    +
  • +
  • +

    参数:count - number 重复次数

    +
  • +
  • +

    返回值:string 重复后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "A".repeat(3); // AAA
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "Abc".repeat(3) // AbcAbcAbc
+  }
+});
+</script>
+
+

left(length: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:截取字符串左边边指定数目的字符串

    +
  • +
  • +

    参数:length - number 截取长度

    +
  • +
  • +

    返回值:string 子字符串,length 如果为负数,则返回空字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".left(1); // A
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "Abc".left(-1) // ""
+  }
+});
+</script>
+
+

right(length: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:截截取字符串右边指定数目的字符串

    +
  • +
  • +

    参数:length - number 截取长度

    +
  • +
  • +

    返回值:string 子字符串,length 如果为负数,则返回空字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".right(1); // c
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "Abc".right(-1) // ""
+  }
+});
+</script>
+
+

truncation(length: number, truncation: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:截取字符串,超出部分用 truncation 替代

    +
  • +
  • +

    参数:length - number 截取长度

    +
  • +
+

             truncation - string 替换字符串

+
    +
  • 返回值:string 截取后的字符串;实际截取长度:当 length 小于等于 truncation 的长度时为,length;当 length 大于 truncation 的长度时为,length - truncation.length
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".truncation(1, "..."); // A...
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "Abc".truncation(6, "...") // Abc
+  }
+});
+</script>
+
+

ltrim()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:删除字符串开头的空白字符(包括:空格、制表位、换行以及其它非打印字符)

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:string 删除了字符串最左边的空白字符的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = " Abc".ltrim(); // "Abc"
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new String(" Abc ").ltrim() // "Abc "
+  }
+});
+</script>
+
+

rtrim()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:删除字符串结尾的空白字符(包括:空格、制表位、换行以及其它非打印字符)

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:string 删除了字符串最右边的空白字符的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = " Abc".rtrim(); // " Abc"
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new String(" Abc ").rtrim() // " Abc"
+  }
+});
+</script>
+
+

startsWith(str: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断字符串是否以给定的字符串开头

    +
  • +
  • +

    参数:str - string 搜索的字符串

    +
  • +
  • +

    返回值:boolean 字符串是否以给定的字符串开头返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".startsWith("a"); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("aBc").startsWith("a") // true
+  }
+});
+</script>
+
+

endsWith(str: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断字符串是否以给定的字符串结尾

    +
  • +
  • +

    参数:str - string 搜索的字符串

    +
  • +
  • +

    返回值:boolean 字符串是否以给定的字符串结尾返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".endsWith("C"); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("aBc").endsWith("c") // true
+  }
+});
+</script>
+
+

lcfirst()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:首字母小写

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:string 首字母小写后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".lcfirst(); // "abc"
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new String("abc").lcfirst() // "abc"
+  }
+});
+</script>
+
+

ucfirst()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:首字母大写

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:string 首字母大写后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "abc".ucfirst(); // "Abc"
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new String("abc").lcfirst() // "Abc"
+  }
+});
+</script>
+
+

escapeHTML()

+ +

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "<a href='https://www.domain.com'>test</a>".escapeHTML(); // &lt;a href='https://www.domain.com'&gt;test&lt;/a&gt;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new String("<a href='https://www.domain.com'>test</a>").lcfirst() // &lt;a href='https://www.domain.com'&gt;test&lt;/a&gt;
+  }
+});
+</script>
+
+

unescapeHTML()

+ +

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "&lt;a href='https://www.domain.com'&gt;test&lt;/a&gt;".unescapeHTML(); // <a href='https://www.domain.com'>test</a>
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "&lt;a href='https://www.domain.com'&gt;test&lt;/a&gt;".unescapeHTML() // <a href='https://www.domain.com'>test</a>
+  }
+});
+</script>
+
+

stripTag(tag: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:删除 HTML 标签

    +
  • +
  • +

    参数:tag - string 待删除标签

    +
  • +
  • +

    返回值:string 删除标签后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "<a href='https://www.domain.com'>test</a><i></i>".stripTag("a"); // test<i></i>
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "<a href='https://www.domain.com'>test</a><i></i>".stripTag("a") // test<i></i>
+  }
+});
+</script>
+
+

stripTags(tag: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:批量删除 HTML 标签

    +
  • +
  • +

    参数:tag - string[] | string 删除指定的标签

    +
  • +
  • +

    返回值:string 删除标签后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "<a href='https://www.domain.com'>test</a><i></i><em>EM</em>".stripTags(["a", "i"]); // test<em>EM</em>
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "<a href='https://www.domain.com'>test</a><i></i><em>EM</em>".stripTags(["a", "i"]) // test<em>EM</em>
+  }
+});
+</script>
+
+

stripScripts()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:删除 script 标签

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:string 删除 script 标签后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = '<script type="text/javascript">alert("test");</script>test'.stripScripts(); // test
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = '<script type="text/javascript">alert("test");</script>test'.stripScripts() // <test
+  }
+});
+</script>
+
+

toArray(delimiter: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:将字符串转换为数组

    +
  • +
  • +

    参数:delimiter - string 分隔字符

    +
  • +
  • +

    返回值:string[] 字符串数组

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "a|b|c".toArray('|'); // [ "a", "b", "c" ]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = "a|b||c".toArray('||') // [ "a|b", "c" ]
+  }
+});
+</script>
+
+

inspect(useDoubleQuotes: boolean)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回一个数组的字符串表示形式

    +
  • +
  • +

    参数:useDoubleQuotes - boolean 是否使用双引号引住

    +
  • +
  • +

    返回值:string 数组的字符串表示形式

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "a|b|c".inspect(true); // \"a|b|c\"
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "a|b|c".inspect(false) // 'a|b|c'
+  }
+});
+</script>
+
+

hashCode()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取字符串 hash code

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:number 字符串的 hash code

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "abc".hashCode(); // 96354
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: number = "abcABC".hashCode() // 2870546592
+  }
+});
+</script>
+
+

random(length: number, type?: RandomType = "NUMERIC" | "LETTER" | "LETTER_NUMERIC" | "CHINESE" | undefined)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:生成随机字符串

    +
  • +
  • +

    参数:length - number 生成字符串的长度

    +
  • +
+

             type - NUMERIC | LETTER | LETTER_NUMERIC | CHINESE | undefined 生成类型,可选参数,当未指定时为 LETTER_NUMERIC

+
    NUMERIC      - 数字随机字符串
+
+    LETTER       - 英文随机字符串
+
+    LETTER_NUMERIC - 英文数字混合随机字符串
+
+    CHINESE      - 中文随机字符串
+
+
    +
  • 返回值:string 随机字符串
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = String.random(6); // 1Diim2
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = String.random(6, "NUMERIC") // 881773
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.2/try.html b/manual/2.2/try.html new file mode 100644 index 0000000..1c2a03e --- /dev/null +++ b/manual/2.2/try.html @@ -0,0 +1,81 @@ +Try 参考手册-参考手册

Try 参考手册

+

方法

+ + + + + + + + + + + + + +
方法描述
these接收任意数目的函数作为参数,返回第一个执行成功的函数(未抛出异常的函数)的结果
+
+

these(args: any[])

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:接收任意数目的函数作为参数,返回第一个执行成功的函数(未抛出异常的函数)的结果

    +
  • +
  • +

    参数:args any[] 一个或多个 function 作为参数

    +
  • +
  • +

    返回值:any 任意函数参数执行结果

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Try.these(function(){
+
+    },
+
+    function() {
+
+  });
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result:any = Try.these(function(){
+
+      },
+
+      function() {
+
+    })
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/2.2/window.html b/manual/2.2/window.html new file mode 100644 index 0000000..d96f22e --- /dev/null +++ b/manual/2.2/window.html @@ -0,0 +1,90 @@ +Window 参考手册-参考手册

Window 参考手册

+

属性

+ + + + + + + + + + + + + + + + + +
属性描述
browser浏览器信息对象
locationLocation 对象
+

方法

+ + + + + + + + + + + + + +
方法描述
copy将字符串复制到剪贴板
+
+

copy(str: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:将字符串复制到剪贴板

    +
  • +
  • +

    参数:str - string 字符串

    +
  • +
  • +

    返回值:无

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  window.copy("这是要复制的字符串");
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    window.copy("这是要复制的字符串")
+  }
+});
+</script>
+
+

Browser

+

Location

+
\ No newline at end of file diff --git a/manual/3.0/array.html b/manual/3.0/array.html new file mode 100644 index 0000000..2affcdc --- /dev/null +++ b/manual/3.0/array.html @@ -0,0 +1,514 @@ +Array 参考手册-参考手册

Array 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
isEmpty判断数组是否为空数组
exists判断元素 item 是否在数组中
first获取数组第一个元素
last获取数组最后一个元素
each按顺序为数组中的每个元素调用一次函数
size获取数组大小
merge连接两个或多个数组
compact返回一个不包含 null/undefined 值元素的数组的新版本
unique对数组的元素进行去重
without返回不包括参数中任意一个指定值的数组
clone克隆数组
clear清空数组
+
+

isEmpty()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断数组是否为空数组

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 数组为空,返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = [].isEmpty(); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = ['a', 'b', 'c'].isEmpty() // false
+  }
+});
+</script>
+
+

exists(item: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断元素 item 是否在数组中

    +
  • +
  • +

    参数:item - any 待检测元素

    +
  • +
  • +

    返回值:boolean 元素 item 是否在数组中返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].exists('a'); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = ['1', '2'].exists(2) // false
+  }
+});
+</script>
+
+

first()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取数组第一个元素

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:any 数组第一个元素

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].first(); // a
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = [1, 2].first() // 1
+  }
+});
+</script>
+
+

last()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取数组最后一个元素

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:any 数组最后一个元素

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].last(); // b
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = [1, 2].last() // 2
+  }
+});
+</script>
+
+

each(callback: (value: T, index: number, array: readonly T[]) => void, thisArg?: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:按顺序为数组中的每个元素调用一次函数,forEach的别名

    +
  • +
  • +

    参数:callback - (value: T, index: number, array: readonly T[]) => void as Function callback 为数组中的每个元素运行的函数,其中:value 为前元素的值,index 为当前元素的数组索引,array 为当前元素所属的数组对象 +any thisArg 可选。要传递给函数以用作其 "this" 值的值,如果此参数为空,则值 "undefined" 将作为其 "this" 值传递

    +
  • +
  • +

    返回值:void

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  ['a', 'b'].each(function (currentValue) {
+      console.log(currentValue)
+  });
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    ['a', 'b'].each(function (currentValue) {
+      console.log(currentValue)
+    })
+  }
+});
+</script>
+
+

size()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取数组大小

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:number 数组大小

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].size(); // 2
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: number = [].size() // 0
+  }
+});
+</script>
+
+

merge(...items: T[])

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:连接两个或多个数组

    +
  • +
  • +

    参数:items - any as T 待连接的 T 类型的数组

    +
  • +
  • +

    返回值:Array<T> 已连接数组的副本

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = [1, 3].merge(2, 4); // [1, 3, 2, 4]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    console result: string[] = ['a', 'b'].merge('c', 'd') // [a, b, c, d]
+  }
+});
+</script>
+
+

compact()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回一个不包含 null/undefined 值元素的数组的新版本

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Array<T> 不包含 null/undefined 值元素的数组的新版本

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b', null, 'c', 'd'].compact(); // [a, b, c, d]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = ['a', 'b', null, 'c', 'd', undefined].compact() // [a, b, c, d]
+  }
+});
+</script>
+
+

unique()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:对数组的元素进行去重

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Array<T> 数组元素进行去重后的新版本

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b', 'c', 'd', 'b', 'd'].unique(); // [a, b, c, d]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = ['a', 'b', 'c', 'c', 'd'].unique() // [a, b, c, d]
+  }
+});
+</script>
+
+

without(values: T[])

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回不包括参数中任意一个指定值的数组

    +
  • +
  • +

    参数:values - any as T[] 排除值数组

    +
  • +
  • +

    返回值:Array<T> 不包括参数中任意一个指定值的数组

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b', 'c', 'd', 'b', 'd'].without('a', 'b'); // [c, d]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = ['a', 'b', 'c', 'd', 'b', 'd'].without('a', 'b') // [c, d]
+  }
+});
+</script>
+
+

clone()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:克隆数组

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Array<T> 克隆结果

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].clone(); // [a, b]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = ['a', 'b'].clone() // [a, b]
+  }
+});
+</script>
+
+

clear()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:清空数组

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Array<T> 空数组

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = ['a', 'b'].clear(); // []
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = ['a', 'b'].clear() // []
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/3.0/browser.html b/manual/3.0/browser.html new file mode 100644 index 0000000..e7fec29 --- /dev/null +++ b/manual/3.0/browser.html @@ -0,0 +1,366 @@ +HttpCookie 参考手册-参考手册

HttpCookie 参考手册

+

属性

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
属性描述
userAgent获取浏览器 User-Agent
name获取浏览器应用程序名称
isMobile是否为移动设备
isChrome是否为 Chrome 浏览器
isFirefox是否为 Firefox 浏览器
isMozilla是否为 Mozilla 浏览器
isMSIE是否为 IE 浏览器
isOpera是否为 Opera 浏览器
isSafari是否为 Safari 浏览器
isNetscape是否为 Netscape 浏览器
+
+

readonly userAgent

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:获取浏览器 User-Agent,等价于 navigator.userAgent

    +
  • +
  • +

    返回值:string 浏览器 User-Agent

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.userAgent; // Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: String = window.browser.userAgent // Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0
+  }
+});
+</script>
+
+

readonly name

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:获取浏览器应用程序名称,等价于 navigator.appName

    +
  • +
  • +

    返回值:string 浏览器应用程序名称

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.name; // Netscape
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: String = window.browser.name // Netscape
+  }
+});
+</script>
+
+

readonly isMobile

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为移动设备,检测依据:User-Agent 中含有 Android、iPhone、iPod、Windows Phone、Mobile、Coolpad、mmp、SmartPhone、midp、wap、xoom、Symbian、J2ME、Blackberry、Wince 其中任意一个字符串

    +
  • +
  • +

    返回值:boolean 是移动设备返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isMobile
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isMobile
+  }
+});
+</script>
+
+

readonly isChrome

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 Chrome 浏览器

    +
  • +
  • +

    返回值:boolean 是 Chrome 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isChrome;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isChrome
+  }
+});
+</script>
+
+

readonly isFirefox

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 Firefox 浏览器

    +
  • +
  • +

    返回值:boolean 是 Firefox 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isFirefox;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isFirefox
+  }
+});
+</script>
+
+

readonly isMSIE

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 IE 浏览器

    +
  • +
  • +

    返回值:boolean 是 IE 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isMSIE;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isMSIE
+  }
+});
+</script>
+
+

readonly isOpera

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 Opera 浏览器

    +
  • +
  • +

    返回值:boolean 是 Opera 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isOpera;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isOpera
+  }
+});
+</script>
+
+

readonly isSafari

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 Safari 浏览器

    +
  • +
  • +

    返回值:boolean 是 Safari 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isSafari;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isSafari
+  }
+});
+</script>
+
+

readonly isNetscape

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:是否为 Netscape 浏览器

    +
  • +
  • +

    返回值:boolean 是 Netscape 浏览器返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = window.browser.isNetscape;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = window.browser.isNetscape
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/3.0/cookie.html b/manual/3.0/cookie.html new file mode 100644 index 0000000..9e82527 --- /dev/null +++ b/manual/3.0/cookie.html @@ -0,0 +1,152 @@ +Cookie 参考手册-参考手册

Cookie 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + +
方法描述
[set](cookie.html#setname-string,-value-string--null-
get获取 Cookie
delete删除 Cookie
+
+

set(name: string, value: string | null | undefined, options?: CookieOptions)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:设置 Cookie

    +
  • +
  • +

    参数:name - string Cookie 名称 +           value - string | null | undefined Cookie 值 +           options - CookieOptions Cookie 选项

    +
  • +
  • +

    返回值:string Cookie 字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.httpCookie.set("name", "测试");
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string | null = document.httpCookie.set("name", "测试", {path: '/', domain: '*.test.com'})
+  }
+});
+</script>
+
+

get(name: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取 Cookie 值

    +
  • +
  • +

    参数:name - string Cookie 名称

    +
  • +
  • +

    返回值:string | null Cookie 值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.httpCookie.get("name")
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string | null = document.httpCookie.get("name")
+  }
+});
+</script>
+
+

delete(name: string, options?: CookieOptions)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:删除 Cookie

    +
  • +
  • +

    参数:name - string Cookie 名称 +           options - CookieOptions Cookie 选项

    +
  • +
  • +

    返回值:无

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.httpCookie.delete("name");
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    document.httpCookie.delete("name", "测试", {domain: '*.test.com'})
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/3.0/date.html b/manual/3.0/date.html new file mode 100644 index 0000000..6cfc64c --- /dev/null +++ b/manual/3.0/date.html @@ -0,0 +1,287 @@ +Date 参考手册-参考手册

Date 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
isLeapYear判断是否为闰年
getSeason获取季节
getDayOfYear获取年份中的第几天
getDaysOfYear获取年份总天数
format将日期时间格式化为字符串
+
+

isLeapYear()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断是否为闰年

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 是闰年,返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Date('2000-04-11').isLeapYear(); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new Date('2000-04-11').isLeapYear() // false
+  }
+});
+</script>
+
+

getSeason()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取季节

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:number 依次返回 0 至 3 的整数,表示春季、夏季、秋季、冬季

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Date('2000-04-11').isLeapYear(); // 0
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new Date('2022-01-11').isLeapYear() // 3
+  }
+});
+</script>
+
+

getDayOfYear()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取年份中的第几天

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:number 年份中的第几天

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Date('2022-02-11').getDayOfYear(); // 42
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: number = new Date('2022-03-01').getDayOfYear(); // 61
+  }
+});
+</script>
+
+

getDaysOfYear()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取年份总天数

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:number 年份总天数

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Date('2022-02-11').getDaysOfYear(); // 365
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: number = new Date('2020-02-11').getDaysOfYear() // 366
+  }
+});
+</script>
+
+

format(format: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:将日期时间格式化为字符串

    +
  • +
  • +

    参数:format - String format 格式字符串

    +
      y - 年
    +
    +  n - 季度(1 到 4)
    +
    +  N - 季度名称
    +
    +  A - 季度中文名称
    +
    +  M - 月
    +
    +  f - 月(Jan 到 Dec)
    +
    +  F - 月(January 到 December)
    +
    +  C - 月,中文名称
    +
    +  d - 日
    +
    +  Y - 年份中的第几天(0 到 365)
    +
    +  T - 月份有几天(28 到 30)
    +
    +  j - 每月天数后面的英文后缀(st,nd,rd 或者 th)
    +
    +  e - 星期几,数字表示,0(表示星期天)到 6(表示星期六)
    +
    +  E - 星期几,数字表示,1(表示星期一)到 7(表示星期天)
    +
    +  l - 星期几,文本表示,3 个字母(Mon 到 Sun)
    +
    +  L - 星期几,完整的文本格式(Sunday 到 Saturday)
    +
    +  w - 星期几,中文名称
    +
    +  W - 一月中第几个星期几
    +
    +  i - 月份中的第几周
    +
    +  o - 年份中的第几周
    +
    +  h - 小时(1~12)
    +
    +  H - 小时(0~23)
    +
    +  m - 分
    +
    +  s - 秒
    +
    +  S - 毫秒
    +
    +  a - 上午/下午标记
    +
    +  O - 与格林威治时间相差的小时数
    +
    +  P - 与格林威治时间相差的小时数,小时和分钟之间有冒号分隔
    +  
    +  Z - 时区
    +
    +
  • +
  • +

    返回值:string 格式化后的日期时间

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Date('2022-01-11').format("f-dd,yyyy"); // Jan-11,2022
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new Date('2022-01-11').format("f-dd,yy"); // Jan-11,22
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/3.0/document.html b/manual/3.0/document.html new file mode 100644 index 0000000..b6f0539 --- /dev/null +++ b/manual/3.0/document.html @@ -0,0 +1,242 @@ +Document 参考手册-参考手册

Document 参考手册

+

属性

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
属性描述
fullScreen检测当前文档是否全屏
fullScreenEnabled检测当前浏览器是否支持全屏模式
fullScreenElement检测当前文档中正在以全屏模式显示的 Element 节点
fullScreen检测当前文档是否全屏
httpCookieCookie 对象操作
+

方法

+ + + + + + + + + + + + + + + + + +
方法描述
requestFullscreen请求进入全屏模式
exitFullscreen退出全屏模式
+
+

readonly fullScreen

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:检测当前文档是否全屏

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 当前文档是否全屏,返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.fullScreen;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = document.fullScreen;
+  }
+});
+</script>
+
+

readonly fullScreenEnabled

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:检测当前浏览器是否支持全屏模式

    +
  • +
  • +

    返回值:boolean 当前浏览器是否支持全屏模式返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.fullScreenEnabled;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = document.fullScreenEnabled
+  }
+});
+</script>
+
+

readonly fullScreenElement

+
    +
  • +

    类型:Property

    +
  • +
  • +

    功能描述:检测当前文档中正在以全屏模式显示的 Element 节点

    +
  • +
  • +

    返回值:boolean 当前文档中正在以全屏模式显示的 Element 节点,返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.fullScreenElement;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = document.fullScreenElement
+  }
+});
+</script>
+
+

requestFullscreen()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:请求进入全屏模式

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Promise Promise

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.requestFullscreen();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: Promise<void> = document.requestFullscreen()
+  }
+});
+</script>
+
+

exitFullscreen()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:退出全屏模式

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Promise Promise

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = document.exitFullscreen();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: Promise<void> = document.exitFullscreen()
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/3.0/function.html b/manual/3.0/function.html new file mode 100644 index 0000000..d2df5e8 --- /dev/null +++ b/manual/3.0/function.html @@ -0,0 +1,121 @@ +Function 参考手册-参考手册

Function 参考手册

+

方法

+ + + + + + + + + + + + + + + + + +
方法描述
argumentNames获取函数参数名称
delay延时执行函数
+
+

argumentNames(...args: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取函数参数名称

    +
  • +
  • +

    参数:args - any 1个或多个任意类型的可变参数可变参数

    +
  • +
  • +

    返回值:string[] | null 函数参数名称列表

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var fn = function(a, b, c){
+
+  }
+  var result = fn.argumentNames();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const fn = function(a: boolean, b: number, c: String) {
+
+    }
+    const result: string[] | null = fn.argumentNames()
+  }
+});
+</script>
+
+

delay(timeout: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:延时执行函数

    +
  • +
  • +

    参数:timeout - number 延时时间(单位:秒)

    +
  • +
  • +

    返回值:any 函数返回值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var fn = function(a, b, c){
+    return a + b + c;
+  }
+  var result = fn.delay(3)
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const fn = function(a: boolean, b: number, c: number) {
+      return a ? b : c
+    }
+    const result: any = fn.delay(3)
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/3.0/index.html b/manual/3.0/index.html new file mode 100644 index 0000000..4d6c38d --- /dev/null +++ b/manual/3.0/index.html @@ -0,0 +1,30 @@ +API-参考手册
\ No newline at end of file diff --git a/manual/3.0/location.html b/manual/3.0/location.html new file mode 100644 index 0000000..2218e9a --- /dev/null +++ b/manual/3.0/location.html @@ -0,0 +1,109 @@ +Location 参考手册-参考手册

Location 参考手册

+

方法

+ + + + + + + + + + + + + + + + + +
方法描述
getParameters获取所有的请求参数及值
getParameter获取指定请求参数的值
+
+

getParameters()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取所有的请求参数及值

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Record<string, any> 当前请求 URL 中的所有的请求参数及值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = location.getParameters();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: Record<string, any> = location.getParameters()
+  }
+});
+</script>
+
+

getParameter(name: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取指定请求参数的值

    +
  • +
  • +

    参数:string 参数名称

    +
  • +
  • +

    返回值:any 请求参数的值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = location.getParameter("action");
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: any = location.getParameter('action');
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/3.0/math.html b/manual/3.0/math.html new file mode 100644 index 0000000..f0e31ee --- /dev/null +++ b/manual/3.0/math.html @@ -0,0 +1,70 @@ +Function 参考手册-参考手册

Function 参考手册

+

方法

+ + + + + + + + + + + + + +
方法描述
rand延时执行函数
+
+

rand(min: number, max?: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:产生一个指定范围内的随机数

    +
  • +
  • +

    参数:min - number 返回的最低值 +           max - number 返回的最高值

    +
  • +
  • +

    返回值:number 随机数

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Math.rand(1, 5); //
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: number = Math.rand(1, 5)
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/3.0/number.html b/manual/3.0/number.html new file mode 100644 index 0000000..22bd16f --- /dev/null +++ b/manual/3.0/number.html @@ -0,0 +1,197 @@ +Number 参考手册-参考手册

Number 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
toPaddedString延时执行函数
isOdd判断数字是否为奇数
isEven判断数字是否为偶数
isBetween判断一个数字是否在另两个数字之间
+
+

toPaddedString(length: number, radix: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:数字填充

    +
  • +
  • +

    参数:length - number 长度
    +           radix - number 进制

    +
  • +
  • +

    返回值:string 填充后的字符串数字

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = new Number(5).toPaddedString(12, 2); // 0000000000101
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new Number(5).toPaddedString(12, 8) // 0000000000005
+  }
+});
+</script>
+
+

isOdd(num: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断数字是否为奇数

    +
  • +
  • +

    参数:num - number 需要判断的数字

    +
  • +
  • +

    返回值:boolean 数字是为奇数返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Number.isOdd(255); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Number.isOdd(256) // false
+  }
+});
+</script>
+
+

isEven(num: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断数字是否为偶数

    +
  • +
  • +

    参数:num - number 需要判断的数字

    +
  • +
  • +

    返回值:boolean 数字是为偶数返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Number.isEven(255); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Number.isOdd(256) // true
+  }
+});
+</script>
+
+

isBetween(num: number, min: number, max: number, match?: boolean | undefined)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断一个数字是否在另两个数字之间

    +
  • +
  • +

    参数:num - number 需要判断的数字
    +           min - number 最小值
    +           max - number 最大值
    +           match - boolean | undefined 是否包含最小值或最大值

    +
  • +
  • +

    返回值:boolean 数字是否在另两个数字之间,返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Number.isBetween(4, 3, 5); // true
+  var result = Number.isBetween(4, 4, 5); // false
+  var result = Number.isBetween(4, 4, 5, true); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Number.isBetween(4, 3, 5) // true
+    const result: boolean = Number.isBetween(4, 4, 5) // false
+    const result: boolean = Number.isBetween(4, 4, 5, true) // true
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/3.0/object.html b/manual/3.0/object.html new file mode 100644 index 0000000..740e8b2 --- /dev/null +++ b/manual/3.0/object.html @@ -0,0 +1,1049 @@ +Object 参考手册-参考手册

Object 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
type获取对象数据类型
rawType获取对象原始数据类型
isObject判断对象是否为 object 类型
isPlainObject判断对象是否为简单 object 类型
isMap判断对象是否为 Map 类型
isSet判断对象是否为 Set 类型
isSymbol判断对象是否为 Symbol
isPromise判断对象是否为 Promise
isPrimitive判断对象是否为原始类型
isFunction判断对象是否为函数
isArray判断对象是否为数组
isString判断对象是否为字符串对象
isNumber判断对象是否为数字对象
isBoolean判断对象是否为布尔对象
isRegExp判断对象是否为正则对象
isFile判断对象是否为文件对象
isWindow判断对象是否为 windows 对象
isElement判断对象是否为 Element
isEvent判断对象是否为事件对象
isNull判断对象是否为 null 对象
isUndefined判断对象是否为未定义
isUndefinedOrNull判断对象是否为未定义或 null
equals深度判断两个对象是否相等
clone克隆对象
omit克隆对象,但支持删除指定属性
+
+

type(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取对象数据类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:string 对象数据类型

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.type(true); // boolean
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = Object.type(4.4) // number
+  }
+});
+</script>
+
+

rawType(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取对象原始数据类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:string 原始数据类型

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.type("4.4"); // String
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = Object.type(4.4) // Number
+  }
+});
+</script>
+
+

isObject(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 object 类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为 object 类型返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isObject("1"); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isObject(new String("1")) // true
+  }
+});
+</script>
+
+

isPlainObject(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为简单 object 类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为简单 object 类型返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isPlainObject(new String("1")); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isPlainObject({"a":"A"}) // true
+  }
+});
+</script>
+
+

isMap(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 Map 类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为 Map 类型返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isMap(new Map()); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isMap({"a":"A"}) // false
+  }
+});
+</script>
+
+

isSet(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 Map 类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为 Set 类型返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isSet(new Set()); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isSet({"a":"A"}) // false
+  }
+});
+</script>
+
+

isSymbol(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 Symbol

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为 Symbol 返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isSymbol(Symbol('a')); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isSymbol({"a":"A"}) // false
+  }
+});
+</script>
+
+

isPromise(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 Promise

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为 Promise 返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isPromise(new Promise(function(){})); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isPromise({"a":"A"}) // false
+  }
+});
+</script>
+
+

isPrimitive(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为原始类型

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为原始类型返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isPrimitive(11); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isPromise({"a":"A"}) // false
+  }
+});
+</script>
+
+

isFunction(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为函数

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为函数返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isFunction(location.href); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isFunction("a".replace) // true
+  }
+});
+</script>
+
+

isArray(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为数组

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为数组返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isArray([1, 2]); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isArray({"a":"A"}) // false
+  }
+});
+</script>
+
+

isString(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为字符串对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为字符串返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isString(1); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isString("1") // true
+  }
+});
+</script>
+
+

isNumber(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为数字对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为数字对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isNumber(1.0); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isNumber("1.0") // false
+  }
+});
+</script>
+
+

isBoolean(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为布尔对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象为布尔对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isBoolean(false); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isBoolean(1) // false
+  }
+});
+</script>
+
+

isRegExp(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为正则对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为正则对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isRegExp(/^[a-z]$/); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isRegExp('/^[a-z]$/') // false
+  }
+});
+</script>
+
+

isFile(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为文件对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为文件对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isFile(new File(['text1', 'text2'], 'test.txt', {type: 'text/plain'})); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = bject.isFile(document) // false
+  }
+});
+</script>
+
+

isWindow(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 windows 对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为 windows 对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isWindow(window); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isWindow(document) // false
+  }
+});
+</script>
+
+

isElement(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 Element

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为 Element 返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isElement(document); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isElement(document.body) // false
+  }
+});
+</script>
+
+

isEvent(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为事件对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为事件对象返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isEvent(document.onclick); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isEvent(document.onclick) // false
+  }
+});
+</script>
+
+

isNull(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为 null

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为 null 返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isNull(null); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isNull("A") // false
+  }
+});
+</script>
+
+

isUndefined(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为未定义

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为未定义返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isUndefined(a); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isUndefined(b) // true
+  }
+});
+</script>
+
+

isUndefinedOrNull(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断对象是否为未定义或 null

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:boolean 对象是否为未定义或 null 返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.isUndefinedOrNull(a); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = Object.isUndefinedOrNull(document.body) // false
+  }
+});
+</script>
+
+

equals(obj1: any, obj2: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:深度判断两个对象是否相等

    +
  • +
  • +

    参数:obj1 - any 一个对象 +           obj2 - any 用于和 obj1 比较的对象

    +
  • +
  • +

    返回值:boolean 当两个对象相等时,返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.equals("a", "A"); // false
+  var result = Object.equals("a", "a"); // true
+  var result = Object.equals(1, 1.0); // true
+  var result = Object.equals([1], [1.0]); // true
+  var result = Object.equals([1], [1.0, 1.1]); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+  const result: boolean = Object.equals("a", "A") // false
+  const result: boolean = Object.equals("a", "a") // true
+  const result: boolean = Object.equals(1, 1.0) // true
+  const result: boolean = Object.equals([1], [1.0]) // true
+  const result: boolean = Object.equals([1], [1.0, 1.1]) // false
+  }
+});
+</script>
+
+

clone(obj: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:克隆对象

    +
  • +
  • +

    参数:obj - any 对象变量

    +
  • +
  • +

    返回值:any 新对象实例

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Object.clone({"a": "A"}); // {"a": "A"}
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: any = Object.clone({"a":"A"}) // {"a": "A"}
+  }
+});
+</script>
+
+

omit<T extends object, K extends keyof T>(obj: T, ...fields: K[])

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:克隆对象,但支持删除指定属性

    +
  • +
  • +

    参数:obj - object 任意对象 +           fields - K[] 需要删除的属性

    +
  • +
  • +

    返回值:any 新对象实例

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var source = {
+    id: 1,
+    name: 'buession',
+    year: 2023
+  };
+  var result = Object.omit(source, "id", "year"); // {"name": "buession"}
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+  const source = {
+    id: 1,
+    name: 'buession',
+    year: 2023
+  };
+  const result = Object.omit(source, "id", "year") // {"name": "buession"}
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/3.0/optional.html b/manual/3.0/optional.html new file mode 100644 index 0000000..3cc43b4 --- /dev/null +++ b/manual/3.0/optional.html @@ -0,0 +1,282 @@ +Optional 参考手册-参考手册

Optional 参考手册

+

Optional 类是一个可以为 null 或 undefined 的容器对象,如果值 value 存在则 isPresent() 方法会返回 true,调用 get() 方法会返回 value 的值。 +其设计思想,参考 java8 的 Optional

+

使用方式,在构造函数中传入任意类型值;Optional 提供很多有用的方法,这样我们就不用显式进行 null 值和 undefined 的检测。

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
of返回一个指定 T 类型的值的 Optional 实例
ofNullable如果为非 null 或 undefined,返回 Optional 描述的指定值的实例,否则返回空的 Optional 实例
empty返回空的 Optional 实例
get如果 value 不为 null 或 undefined,则返回 value 的值;否则抛出异常
orElse如果 value 不为 null 或 undefined,则返回 value 的值;否则返回 other
isPresent如果 value 不为 null 或 undefined,则返回 true;否则返回 false
+
+
<script type="text/javascript">
+  var optional = new Optional(any value);
+</script>
+
+

static of(value: T)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回一个指定 T 类型的值的 Optional 实例

    +
  • +
  • +

    参数:value - any of T 任意类型的值

    +
  • +
  • +

    返回值:Object T 类型的值的 Optional 实例

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  Optional.of(11);
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: boolean = Optional.<boolean>of(false)
+  }
+});
+</script>
+
+

static ofNullable(value: T)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:如果为非 null 或 undefined,返回 Optional 描述的指定值的实例,否则返回空的 Optional 实例

    +
  • +
  • +

    参数:value - any as T 任意类型的值

    +
  • +
  • +

    返回值:Object T 类型的值的 Optional 实例,或空的 Optional 实例

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  Optional.ofNullable('js');
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: number = Optional.<number>ofNullable(11)
+  }
+});
+</script>
+
+

static empty()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回空的 Optional 实例

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:Object as Optional 空的 Optional 实例

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  Optional.empty();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: null Optional.<null>empty()
+  }
+});
+</script>
+
+

get()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:如果 value 不为 null 或 undefined,则返回 value 的值;否则抛出异常

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:any as T Optional 中包含这个值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var optional = Optional.of(11);
+  var result = optional.get(); // 11
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: number = Optional.<number>of(11)
+    const result = optional.get() // 11
+  }
+});
+</script>
+
+

orElse(other: T)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:如果 value 不为 null 或 undefined,则返回 value 的值;否则返回 other

    +
  • +
  • +

    参数:other - any of T 任意类型的值

    +
  • +
  • +

    返回值:any as T value 不为 null 或 undefined,则返回 value 的值;否则返回 other

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var optional = Optional.of(null);
+  var result = optional.orElse("abc"); // abc
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: boolean = Optional.<boolean>of(undefined)
+    const result = optional.orElse(false) // false
+  }
+});
+</script>
+
+

isPresent()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:如果 value 不为 null 或 undefined,则返回 true;否则返回 false

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean value 不为 null 或 undefined,则返回 true;否则返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var optional = Optional.of(null);
+  var result = optional.isPresent(); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const optional: number = Optional.<number>of(11)
+    const result = optional.isPresent() // true
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/3.0/prototype.html b/manual/3.0/prototype.html new file mode 100644 index 0000000..a84ed0e --- /dev/null +++ b/manual/3.0/prototype.html @@ -0,0 +1,157 @@ +Prototype 参考手册-参考手册

Prototype 参考手册

+

属性

+ + + + + + + + + + + + + +
属性描述
version获取 Buession Prototype 版本
+

方法

+ + + + + + + + + + + + + + + + + +
方法描述
emptyFunction执行一个空方法
K返回参数传递的任意值
+
+

version

+
    +
  • +

    类型:String

    +
  • +
  • +

    功能描述:获取 Buession Prototype 版本

    +
  • +
  • +

    返回值:Buession Prototype 版本

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var ver = Prototype.version;
+</script>
+
+

vue

+
<template>
+  <div>
+    <div>Prototype 版本:{Prototype.version}</div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+  }
+});
+</script>
+
+

emptyFunction()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:执行一个空方法

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:void

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  Prototype.emptyFunction();
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    Prototype.emptyFunction()
+  }
+});
+</script>
+
+

K(x: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回参数传递的任意值

    +
  • +
  • +

    参数:x - any 任意值

    +
  • +
  • +

    返回值:any 参数传递的任意值

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var v = Prototype.K(object);
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const v: any = Prototype.K(object)
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/3.0/string.html b/manual/3.0/string.html new file mode 100644 index 0000000..ea7c17d --- /dev/null +++ b/manual/3.0/string.html @@ -0,0 +1,1039 @@ +String 参考手册-参考手册

String 参考手册

+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法描述
exists判断字符串是否存在
equals判断字符串是否相等
equalsIgnoreCase判断字符串是否相等,不考虑大小写
isEmpty判断是否为空字符串
isNotEmpty判断是否不为空字符串
isBlank判断是否为空白字符串
repeat重复一个字符串
left截取字符串左边边指定数目的字符串
right截取字符串右边指定数目的字符串
truncation截取字符串,超出部分用 truncation 替代
ltrim删除字符串开头的空白字符
rtrim删除字符串结尾的空白字符
startsWith判断字符串是否以给定的字符串开头
endsWith判断字符串是否以给定的字符串结尾
lcfirst首字母小写
ucfirst首字母大写
escapeHTML将 HTML 编码
unescapeHTML将 HTML 实体字符解码
stripTag删除 HTML 标签
stripTags批量删除 HTML 标签
stripScripts删除 script 标签
toArray将字符串转换为数组
inspect返回一个数组的字符串表示形式
hashCode获取字符串 hash code
random生成随机字符串
+
+

exists(str: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断字符串是否存在

    +
  • +
  • +

    参数:str - string 子字符串

    +
  • +
  • +

    返回值:boolean 子字符串存在返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "ABC".exists("A"); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = "ABC".exists("a") // false
+  }
+});
+</script>
+
+

equals(str: string | undefined | null)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断字符串是否相等

    +
  • +
  • +

    参数:str - string | undefined | null 与此 String 进行比较的对象

    +
  • +
  • +

    返回值:boolean 字符串相等返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "A".equals(new String("A")); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = "A".equals("a") // false
+  }
+});
+</script>
+
+

equalsIgnoreCase(str: string | undefined | null)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断字符串是否相等,不考虑大小写

    +
  • +
  • +

    参数:str - string | undefined | null 与此 String 进行比较的对象

    +
  • +
  • +

    返回值:boolean 字符串相等返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "A".equalsIgnoreCase("a"); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("a").equalsIgnoreCase("1") // false
+  }
+});
+</script>
+
+

isEmpty()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断是否为空字符串

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 字符串为空,即长度为 0 返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = " ".isEmpty(); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("").isEmpty() // true
+  }
+});
+</script>
+
+

isNotEmpty()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断是否不为空字符串

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 字符串不为空,即长度大于 0 返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = " ".isNotEmpty(); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("").isNotEmpty() // false
+  }
+});
+</script>
+
+

isBlank()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断是否为空白字符串

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:boolean 字符串全为空白字符串(即:空格、回车、Tag 制表位、非打印字符)返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = " ".isBlank(); // true
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("\t\n").isBlank() // true
+  }
+});
+</script>
+
+

repeat(count: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:重复一个字符串

    +
  • +
  • +

    参数:count - number 重复次数

    +
  • +
  • +

    返回值:string 重复后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "A".repeat(3); // AAA
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "Abc".repeat(3) // AbcAbcAbc
+  }
+});
+</script>
+
+

left(length: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:截取字符串左边边指定数目的字符串

    +
  • +
  • +

    参数:length - number 截取长度

    +
  • +
  • +

    返回值:string 子字符串,length 如果为负数,则返回空字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".left(1); // A
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "Abc".left(-1) // ""
+  }
+});
+</script>
+
+

right(length: number)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:截截取字符串右边指定数目的字符串

    +
  • +
  • +

    参数:length - number 截取长度

    +
  • +
  • +

    返回值:string 子字符串,length 如果为负数,则返回空字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".right(1); // c
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "Abc".right(-1) // ""
+  }
+});
+</script>
+
+

truncation(length: number, truncation?: string = "...")

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:截取字符串,超出部分用 truncation 替代

    +
  • +
  • +

    参数:length - number 截取长度

    +
  • +
+

             truncation - string 替换字符串

+
    +
  • 返回值:string 截取后的字符串;实际截取长度:当 length 小于等于 truncation 的长度时为,length;当 length 大于 truncation 的长度时为,length - truncation.length
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".truncation(1, "..."); // A...
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "Abc".truncation(6, "...") // Abc
+  }
+});
+</script>
+
+

ltrim()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:删除字符串开头的空白字符(包括:空格、制表位、换行以及其它非打印字符)

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:string 删除了字符串最左边的空白字符的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = " Abc".ltrim(); // "Abc"
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new String(" Abc ").ltrim() // "Abc "
+  }
+});
+</script>
+
+

rtrim()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:删除字符串结尾的空白字符(包括:空格、制表位、换行以及其它非打印字符)

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:string 删除了字符串最右边的空白字符的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = " Abc".rtrim(); // " Abc"
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new String(" Abc ").rtrim() // " Abc"
+  }
+});
+</script>
+
+

startsWith(str: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断字符串是否以给定的字符串开头

    +
  • +
  • +

    参数:str - string 搜索的字符串

    +
  • +
  • +

    返回值:boolean 字符串是否以给定的字符串开头返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".startsWith("a"); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("aBc").startsWith("a") // true
+  }
+});
+</script>
+
+

endsWith(str: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:判断字符串是否以给定的字符串结尾

    +
  • +
  • +

    参数:str - string 搜索的字符串

    +
  • +
  • +

    返回值:boolean 字符串是否以给定的字符串结尾返回 true;否则,返回 false

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".endsWith("C"); // false
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: boolean = new String("aBc").endsWith("c") // true
+  }
+});
+</script>
+
+

lcfirst()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:首字母小写

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:string 首字母小写后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "Abc".lcfirst(); // "abc"
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new String("abc").lcfirst() // "abc"
+  }
+});
+</script>
+
+

ucfirst()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:首字母大写

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:string 首字母大写后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "abc".ucfirst(); // "Abc"
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new String("abc").lcfirst() // "Abc"
+  }
+});
+</script>
+
+

escapeHTML()

+ +

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "<a href='https://www.domain.com'>test</a>".escapeHTML(); // &lt;a href='https://www.domain.com'&gt;test&lt;/a&gt;
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = new String("<a href='https://www.domain.com'>test</a>").lcfirst() // &lt;a href='https://www.domain.com'&gt;test&lt;/a&gt;
+  }
+});
+</script>
+
+

unescapeHTML()

+ +

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "&lt;a href='https://www.domain.com'&gt;test&lt;/a&gt;".unescapeHTML(); // <a href='https://www.domain.com'>test</a>
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "&lt;a href='https://www.domain.com'&gt;test&lt;/a&gt;".unescapeHTML() // <a href='https://www.domain.com'>test</a>
+  }
+});
+</script>
+
+

stripTag(tag: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:删除 HTML 标签

    +
  • +
  • +

    参数:tag - string 待删除标签

    +
  • +
  • +

    返回值:string 删除标签后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "<a href='https://www.domain.com'>test</a><i></i>".stripTag("a"); // test<i></i>
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "<a href='https://www.domain.com'>test</a><i></i>".stripTag("a") // test<i></i>
+  }
+});
+</script>
+
+

stripTags(tag: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:批量删除 HTML 标签

    +
  • +
  • +

    参数:tag - string[] | string 删除指定的标签

    +
  • +
  • +

    返回值:string 删除标签后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "<a href='https://www.domain.com'>test</a><i></i><em>EM</em>".stripTags(["a", "i"]); // test<em>EM</em>
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "<a href='https://www.domain.com'>test</a><i></i><em>EM</em>".stripTags(["a", "i"]) // test<em>EM</em>
+  }
+});
+</script>
+
+

stripScripts()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:删除 script 标签

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:string 删除 script 标签后的字符串

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = '<script type="text/javascript">alert("test");</script>test'.stripScripts(); // test
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = '<script type="text/javascript">alert("test");</script>test'.stripScripts() // <test
+  }
+});
+</script>
+
+

toArray(delimiter: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:将字符串转换为数组

    +
  • +
  • +

    参数:delimiter - string 分隔字符

    +
  • +
  • +

    返回值:string[] 字符串数组

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "a|b|c".toArray('|'); // [ "a", "b", "c" ]
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string[] = "a|b||c".toArray('||') // [ "a|b", "c" ]
+  }
+});
+</script>
+
+

inspect(useDoubleQuotes: boolean)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:返回一个数组的字符串表示形式

    +
  • +
  • +

    参数:useDoubleQuotes - boolean 是否使用双引号引住

    +
  • +
  • +

    返回值:string 数组的字符串表示形式

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "a|b|c".inspect(true); // \"a|b|c\"
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = "a|b|c".inspect(false) // 'a|b|c'
+  }
+});
+</script>
+
+

hashCode()

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:获取字符串 hash code

    +
  • +
  • +

    参数:无

    +
  • +
  • +

    返回值:number 字符串的 hash code

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = "abc".hashCode(); // 96354
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: number = "abcABC".hashCode() // 2870546592
+  }
+});
+</script>
+
+

random(length: number, type?: RandomType = "NUMERIC" | "LETTER" | "LETTER_NUMERIC" | "CHINESE" | undefined)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:生成随机字符串

    +
  • +
  • +

    参数:length - number 生成字符串的长度

    +
  • +
+

             type - NUMERIC | LETTER | LETTER_NUMERIC | CHINESE | undefined 生成类型,可选参数,当未指定时为 LETTER_NUMERIC

+
    NUMERIC      - 数字随机字符串
+
+    LETTER       - 英文随机字符串
+
+    LETTER_NUMERIC - 英文数字混合随机字符串
+
+    CHINESE      - 中文随机字符串
+
+
    +
  • 返回值:string 随机字符串
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = String.random(6); // 1Diim2
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result: string = String.random(6, "NUMERIC") // 881773
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/3.0/try.html b/manual/3.0/try.html new file mode 100644 index 0000000..6d417cd --- /dev/null +++ b/manual/3.0/try.html @@ -0,0 +1,81 @@ +Try 参考手册-参考手册

Try 参考手册

+

方法

+ + + + + + + + + + + + + +
方法描述
these接收任意数目的函数作为参数,返回第一个执行成功的函数(未抛出异常的函数)的结果
+
+

these(args: any[])

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:接收任意数目的函数作为参数,返回第一个执行成功的函数(未抛出异常的函数)的结果

    +
  • +
  • +

    参数:args any[] 一个或多个 function 作为参数

    +
  • +
  • +

    返回值:any 任意函数参数执行结果

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  var result = Try.these(function(){
+
+    },
+
+    function() {
+
+  });
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    const result:any = Try.these(function(){
+
+      },
+
+      function() {
+
+    })
+  }
+});
+</script>
+
+
\ No newline at end of file diff --git a/manual/3.0/window.html b/manual/3.0/window.html new file mode 100644 index 0000000..2b50831 --- /dev/null +++ b/manual/3.0/window.html @@ -0,0 +1,136 @@ +Window 参考手册-参考手册

Window 参考手册

+

属性

+ + + + + + + + + + + + + + + + + +
属性描述
browser浏览器信息对象
locationLocation 对象
+

方法

+ + + + + + + + + + + + + + + + + +
方法描述
copy将字符串复制到剪贴板
delay延时执行方法
+
+

copy(str: string)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:将字符串复制到剪贴板

    +
  • +
  • +

    参数:str - string 字符串

    +
  • +
  • +

    返回值:无

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  window.copy("这是要复制的字符串");
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    window.copy("这是要复制的字符串")
+  }
+});
+</script>
+
+

delay(func: Function, wait?: number, ...args: any)

+
    +
  • +

    类型:Function

    +
  • +
  • +

    功能描述:延时执行

    +
  • +
  • +

    参数:func - Function 方法 +             wait - number 延时时长(单位:毫秒) +             args - any[] 方法参数

    +
  • +
  • +

    返回值:any

    +
  • +
+

示例:

+

原生 JavaScript

+
<script type="text/javascript">
+  window.delay(function () {
+    location.href = "/";
+  }, 3000);
+</script>
+
+

vue

+
<template>
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+export default defineComponent({
+  setup() {
+    window.delay(function () {
+      // code
+    });
+  }
+});
+</script>
+
+

Browser

+

Location

+
\ No newline at end of file diff --git a/manual/index.html b/manual/index.html new file mode 100644 index 0000000..93a9304 --- /dev/null +++ b/manual/index.html @@ -0,0 +1,19 @@ +参考手册简介-参考手册

参考手册简介

+

Buession Prototype 是基于对原生 JavaScript 对象(如:String、Array、Date)的扩展,和浏览器兼容性的处理,并添加在实际场景中的一些常用方法

+

本章节将想您讲解,如何使用 Buession Prototype,为您提供前端原生 JavaScript 对象扩展的最佳实践。

+
\ No newline at end of file diff --git a/manual/overview.html b/manual/overview.html new file mode 100644 index 0000000..46c6ca5 --- /dev/null +++ b/manual/overview.html @@ -0,0 +1,45 @@ +参考指南-参考手册

参考指南

+

Buession Prototype ArrayDateDocument、Function、MathNumberStringWindowLocationHTMLElement、Object 等十一个对象扩展以及 Try、Optional 两大原生 API。

+

本文档包含了完整的 Buession Prototype 的参考文档。

+ + + + + + + + + + + + + + + + + + + + + + + + + +
版本手册
3.0.xAPI 手册
2.2.xAPI 手册
2.1.xAPI 手册
2.0.xAPI 手册
+
\ No newline at end of file diff --git a/search_json.js b/search_json.js new file mode 100644 index 0000000..1657d1e --- /dev/null +++ b/search_json.js @@ -0,0 +1,2959 @@ +window.ydoc_plugin_search_json = { + "文档": [ + { + "title": "快速入门", + "content": "TIP\n\n官方指南假设您已了解\"权限\"方面的相关知识,关于 HTML 和 JavaScript 的初级知识。如果您使用 npm 包,那么您需要具备掌握 npm 的基础知识,否则这不是您使用 Buession Prototype 的最佳方式;此种情况下,将建议您使用 script 标签引入 Buession Prototype 的文件。\n\n您可以根据本文档中的示例,快速熟悉 Buession Prototype 的使用方法,本文档中所有示例基于原生 js 和 vue 二者编写。本文档给出了不通方法的安装方式,但是我们始终建议您,直接下载压缩后的文件到您的项目中进行使用,或者直接引用 unpkg 、jsdelivr的资源。", + "url": "/docs/quickstart.html", + "children": [ + { + "title": "下一步可做什么?", + "url": "/docs/quickstart.html#下一步可做什么?", + "content": "下一步可做什么?您对 Buession Prototype 大致了解后,您接下来可以做以下事情:了解兼容性:了解 Buession Prototype 对浏览器的兼容性\n安装:安装/引用 Buession Prototype\n使用:开始使用 BuessionPrototype 功能\n" + } + ] + }, + { + "title": "框架介绍", + "content": "", + "url": "/docs/intro.html", + "children": [ + { + "title": "Buession Prototype 框架是什么?", + "url": "/docs/intro.html#buession-prototype-框架是什么?", + "content": "Buession Prototype 框架是什么?Buession Prototype 是基于对原生 JavaScript 对象(如:String、Array、Date)的扩展,和浏览器兼容性的处理,并添加在实际场景中的一些常用方法。该框架借鉴了其它语言的一些 API 和早期 JavaScript 框架 prototypejs" + } + ] + }, + { + "title": "开源协议", + "content": "MIT LicenseCopyright (c) 2021 BuessionPermission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software.THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.", + "url": "/docs/license.html", + "children": [] + }, + { + "title": "版本说明", + "content": "该项目基于 GNU 版风格定义项目版本,即:主版本号.子版本号.修正版本号。管理策略主版本号,发生变更时,不保证所有的 API 对上一个版本兼容,但保障大部分能兼容;主版本变更,可能涉及类、接口、枚举、方法的删除,或者包名的变更\n子版本号,发生变更时,完全兼容上一个版本,主要会增加一些小的功能或API,底层逻辑的调整调优\n修正版本号,主要用于修复 BUG、优化性能、安全漏洞修复,不会新增、变更、删除已有 API\n", + "url": "/docs/version.html", + "children": [] + }, + { + "title": "安装及使用", + "content": "您可以通过 NPM、YARN 或者通过 的方式引入 unpkg.com 上的包;稳定版 。", + "url": "/docs/installation.html", + "children": [ + { + "title": "NPM", + "url": "/docs/installation.html#npm", + "content": "NPMnpm install @buession/prototype# or\nyarn add @buession/prototype\n" + }, + { + "title": "CDN", + "url": "/docs/installation.html#cdn", + "content": "CDN对于生产环境,我们推荐链接到一个明确的版本号和构建文件,以避免新版本造成的不可预期的破坏。\n最新版:具体版本:\n" + } + ] + }, + { + "title": "环境要求", + "content": "支持环境现代浏览器\nIE9,IE10,IE11\n\n\nIE / Edge\nFirefox\nChrome\nSafari\niOS Safari\nOpera\n\n\n\n\nIE9, IE10, IE11, Edge\nlast 5 versions\nlast 5 versions\nlast 5 versions\nlast 5 versions\nlast 5 versions\n\n\nNodeJsnode v13+,建议使用 v14 及其以上版本TypeScriptTypeScript 4.1.xES支持 ES5、ES6、ES2015、ES2016、ES2017、ES2018、ESNext 的版本。", + "url": "/docs/requirement.html", + "children": [] + } + ], + "参考手册": [ + { + "title": "参考手册简介", + "content": "Buession Prototype 是基于对原生 JavaScript 对象(如:String、Array、Date)的扩展,和浏览器兼容性的处理,并添加在实际场景中的一些常用方法本章节将想您讲解,如何使用 Buession Prototype,为您提供前端原生 JavaScript 对象扩展的最佳实践。", + "url": "/manual/index.html", + "children": [] + }, + { + "title": "参考指南", + "content": "Buession Prototype Array、Date、Document、Function、Math、Number、String、Window、Location、HTMLElement、Object 等十一个对象扩展以及 Try、Optional 两大原生 API。本文档包含了完整的 Buession Prototype 的参考文档。\n\n版本\n手册\n\n\n\n\n3.0.x\nAPI 手册\n\n\n2.2.x\nAPI 手册\n\n\n2.1.x\nAPI 手册\n\n\n2.0.x\nAPI 手册\n\n\n", + "url": "/manual/overview.html", + "children": [] + }, + { + "title": "API", + "content": "Buession Prototype API 包含以下目录:PrototypeTryOptionalArrayDateDocumentFunctionMathNumberObjectStringWindow", + "url": "/manual/3.0/index.html", + "children": [] + }, + { + "title": "Prototype 参考手册", + "content": "", + "url": "/manual/3.0/prototype.html", + "children": [ + { + "title": "属性", + "url": "/manual/3.0/prototype.html#属性", + "content": "属性\n\n属性\n描述\n\n\n\n\nversion\n获取 Buession Prototype 版本\n\n\n" + }, + { + "title": "方法", + "url": "/manual/3.0/prototype.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nemptyFunction\n执行一个空方法\n\n\nK\n返回参数传递的任意值\n\n\n" + }, + { + "title": "version", + "url": "/manual/3.0/prototype.html#version", + "content": "version\n类型:String\n\n\n功能描述:获取 Buession Prototype 版本\n\n\n返回值:Buession Prototype 版本\n\n示例:原生 JavaScript var ver = Prototype.version;\n\nvue \n Prototype 版本:{Prototype.version}\n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n }\n});\n\n" + }, + { + "title": "emptyFunction()", + "url": "/manual/3.0/prototype.html#emptyfunction", + "content": "emptyFunction()\n类型:Function\n\n\n功能描述:执行一个空方法\n\n\n参数:无\n\n\n返回值:void\n\n示例:原生 JavaScript Prototype.emptyFunction();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n Prototype.emptyFunction()\n }\n});\n\n" + }, + { + "title": "K(x: any)", + "url": "/manual/3.0/prototype.html#kx-any", + "content": "K(x: any)\n类型:Function\n\n\n功能描述:返回参数传递的任意值\n\n\n参数:x - any 任意值\n\n\n返回值:any 参数传递的任意值\n\n示例:原生 JavaScript var v = Prototype.K(object);\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const v: any = Prototype.K(object)\n }\n});\n\n" + } + ] + }, + { + "title": "Try 参考手册", + "content": "", + "url": "/manual/3.0/try.html", + "children": [ + { + "title": "方法", + "url": "/manual/3.0/try.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nthese\n接收任意数目的函数作为参数,返回第一个执行成功的函数(未抛出异常的函数)的结果\n\n\n" + }, + { + "title": "these(args: any[])", + "url": "/manual/3.0/try.html#theseargs-any[]", + "content": "these(args: any[])\n类型:Function\n\n\n功能描述:接收任意数目的函数作为参数,返回第一个执行成功的函数(未抛出异常的函数)的结果\n\n\n参数:args any[] 一个或多个 function 作为参数\n\n\n返回值:any 任意函数参数执行结果\n\n示例:原生 JavaScript var result = Try.these(function(){\n\n },\n\n function() {\n\n });\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result:any = Try.these(function(){\n\n },\n\n function() {\n\n })\n }\n});\n\n" + } + ] + }, + { + "title": "Optional 参考手册", + "content": "Optional 类是一个可以为 null 或 undefined 的容器对象,如果值 value 存在则 isPresent() 方法会返回 true,调用 get() 方法会返回 value 的值。其设计思想,参考 java8 的 Optional使用方式,在构造函数中传入任意类型值;Optional 提供很多有用的方法,这样我们就不用显式进行 null 值和 undefined 的检测。", + "url": "/manual/3.0/optional.html", + "children": [ + { + "title": "方法", + "url": "/manual/3.0/optional.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nof\n返回一个指定 T 类型的值的 Optional 实例\n\n\nofNullable\n如果为非 null 或 undefined,返回 Optional 描述的指定值的实例,否则返回空的 Optional 实例\n\n\nempty\n返回空的 Optional 实例\n\n\nget\n如果 value 不为 null 或 undefined,则返回 value 的值;否则抛出异常\n\n\norElse\n如果 value 不为 null 或 undefined,则返回 value 的值;否则返回 other\n\n\nisPresent\n如果 value 不为 null 或 undefined,则返回 true;否则返回 false\n\n\n var optional = new Optional(any value);\n\n" + }, + { + "title": "static of(value: T)", + "url": "/manual/3.0/optional.html#static-ofvalue-t", + "content": "static of(value: T)\n类型:Function\n\n\n功能描述:返回一个指定 T 类型的值的 Optional 实例\n\n\n参数:value - any of T 任意类型的值\n\n\n返回值:Object T 类型的值的 Optional 实例\n\n示例:原生 JavaScript Optional.of(11);\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: boolean = Optional.of(false)\n }\n});\n\n" + }, + { + "title": "static ofNullable(value: T)", + "url": "/manual/3.0/optional.html#static-ofnullablevalue-t", + "content": "static ofNullable(value: T)\n类型:Function\n\n\n功能描述:如果为非 null 或 undefined,返回 Optional 描述的指定值的实例,否则返回空的 Optional 实例\n\n\n参数:value - any as T 任意类型的值\n\n\n返回值:Object T 类型的值的 Optional 实例,或空的 Optional 实例\n\n示例:原生 JavaScript Optional.ofNullable('js');\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: number = Optional.ofNullable(11)\n }\n});\n\n" + }, + { + "title": "static empty()", + "url": "/manual/3.0/optional.html#static-empty", + "content": "static empty()\n类型:Function\n\n\n功能描述:返回空的 Optional 实例\n\n\n参数:无\n\n\n返回值:Object as Optional 空的 Optional 实例\n\n示例:原生 JavaScript Optional.empty();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: null Optional.empty()\n }\n});\n\n" + }, + { + "title": "get()", + "url": "/manual/3.0/optional.html#get", + "content": "get()\n类型:Function\n\n\n功能描述:如果 value 不为 null 或 undefined,则返回 value 的值;否则抛出异常\n\n\n参数:无\n\n\n返回值:any as T Optional 中包含这个值\n\n示例:原生 JavaScript var optional = Optional.of(11);\n var result = optional.get(); // 11\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: number = Optional.of(11)\n const result = optional.get() // 11\n }\n});\n\n" + }, + { + "title": "orElse(other: T)", + "url": "/manual/3.0/optional.html#orelseother-t", + "content": "orElse(other: T)\n类型:Function\n\n\n功能描述:如果 value 不为 null 或 undefined,则返回 value 的值;否则返回 other\n\n\n参数:other - any of T 任意类型的值\n\n\n返回值:any as T value 不为 null 或 undefined,则返回 value 的值;否则返回 other\n\n示例:原生 JavaScript var optional = Optional.of(null);\n var result = optional.orElse(\"abc\"); // abc\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: boolean = Optional.of(undefined)\n const result = optional.orElse(false) // false\n }\n});\n\n" + }, + { + "title": "isPresent()", + "url": "/manual/3.0/optional.html#ispresent", + "content": "isPresent()\n类型:Function\n\n\n功能描述:如果 value 不为 null 或 undefined,则返回 true;否则返回 false\n\n\n参数:无\n\n\n返回值:boolean value 不为 null 或 undefined,则返回 true;否则返回 false\n\n示例:原生 JavaScript var optional = Optional.of(null);\n var result = optional.isPresent(); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: number = Optional.of(11)\n const result = optional.isPresent() // true\n }\n});\n\n" + } + ] + }, + { + "title": "Array 参考手册", + "content": "", + "url": "/manual/3.0/array.html", + "children": [ + { + "title": "方法", + "url": "/manual/3.0/array.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nisEmpty\n判断数组是否为空数组\n\n\nexists\n判断元素 item 是否在数组中\n\n\nfirst\n获取数组第一个元素\n\n\nlast\n获取数组最后一个元素\n\n\neach\n按顺序为数组中的每个元素调用一次函数\n\n\nsize\n获取数组大小\n\n\nmerge\n连接两个或多个数组\n\n\ncompact\n返回一个不包含 null/undefined 值元素的数组的新版本\n\n\nunique\n对数组的元素进行去重\n\n\nwithout\n返回不包括参数中任意一个指定值的数组\n\n\nclone\n克隆数组\n\n\nclear\n清空数组\n\n\n" + }, + { + "title": "isEmpty()", + "url": "/manual/3.0/array.html#isempty", + "content": "isEmpty()\n类型:Function\n\n\n功能描述:判断数组是否为空数组\n\n\n参数:无\n\n\n返回值:boolean 数组为空,返回 true;否则返回 false\n\n示例:原生 JavaScript var result = [].isEmpty(); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = ['a', 'b', 'c'].isEmpty() // false\n }\n});\n\n" + }, + { + "title": "exists(item: any)", + "url": "/manual/3.0/array.html#existsitem-any", + "content": "exists(item: any)\n类型:Function\n\n\n功能描述:判断元素 item 是否在数组中\n\n\n参数:item - any 待检测元素\n\n\n返回值:boolean 元素 item 是否在数组中返回 true;否则返回 false\n\n示例:原生 JavaScript var result = ['a', 'b'].exists('a'); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = ['1', '2'].exists(2) // false\n }\n});\n\n" + }, + { + "title": "first()", + "url": "/manual/3.0/array.html#first", + "content": "first()\n类型:Function\n\n\n功能描述:获取数组第一个元素\n\n\n参数:无\n\n\n返回值:any 数组第一个元素\n\n示例:原生 JavaScript var result = ['a', 'b'].first(); // a\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = [1, 2].first() // 1\n }\n});\n\n" + }, + { + "title": "last()", + "url": "/manual/3.0/array.html#last", + "content": "last()\n类型:Function\n\n\n功能描述:获取数组最后一个元素\n\n\n参数:无\n\n\n返回值:any 数组最后一个元素\n\n示例:原生 JavaScript var result = ['a', 'b'].last(); // b\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = [1, 2].last() // 2\n }\n});\n\n" + }, + { + "title": "each(callback: (value: T, index: number, array: readonly T[]) => void, thisArg?: any)", + "url": "/manual/3.0/array.html#eachcallback-value-t,-index-number,-array-readonly-t[]-=>-void,-thisarg?-any", + "content": "each(callback: (value: T, index: number, array: readonly T[]) => void, thisArg?: any)\n类型:Function\n\n\n功能描述:按顺序为数组中的每个元素调用一次函数,forEach的别名\n\n\n参数:callback - (value: T, index: number, array: readonly T[]) => void as Function callback 为数组中的每个元素运行的函数,其中:value 为前元素的值,index 为当前元素的数组索引,array 为当前元素所属的数组对象\nany thisArg 可选。要传递给函数以用作其 \"this\" 值的值,如果此参数为空,则值 \"undefined\" 将作为其 \"this\" 值传递\n\n\n返回值:void\n\n示例:原生 JavaScript ['a', 'b'].each(function (currentValue) {\n console.log(currentValue)\n });\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n ['a', 'b'].each(function (currentValue) {\n console.log(currentValue)\n })\n }\n});\n\n" + }, + { + "title": "size()", + "url": "/manual/3.0/array.html#size", + "content": "size()\n类型:Function\n\n\n功能描述:获取数组大小\n\n\n参数:无\n\n\n返回值:number 数组大小\n\n示例:原生 JavaScript var result = ['a', 'b'].size(); // 2\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: number = [].size() // 0\n }\n});\n\n" + }, + { + "title": "merge(...items: T[])", + "url": "/manual/3.0/array.html#merge...items-t[]", + "content": "merge(...items: T[])\n类型:Function\n\n\n功能描述:连接两个或多个数组\n\n\n参数:items - any as T 待连接的 T 类型的数组\n\n\n返回值:Array 已连接数组的副本\n\n示例:原生 JavaScript var result = [1, 3].merge(2, 4); // [1, 3, 2, 4]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n console result: string[] = ['a', 'b'].merge('c', 'd') // [a, b, c, d]\n }\n});\n\n" + }, + { + "title": "compact()", + "url": "/manual/3.0/array.html#compact", + "content": "compact()\n类型:Function\n\n\n功能描述:返回一个不包含 null/undefined 值元素的数组的新版本\n\n\n参数:无\n\n\n返回值:Array 不包含 null/undefined 值元素的数组的新版本\n\n示例:原生 JavaScript var result = ['a', 'b', null, 'c', 'd'].compact(); // [a, b, c, d]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = ['a', 'b', null, 'c', 'd', undefined].compact() // [a, b, c, d]\n }\n});\n\n" + }, + { + "title": "unique()", + "url": "/manual/3.0/array.html#unique", + "content": "unique()\n类型:Function\n\n\n功能描述:对数组的元素进行去重\n\n\n参数:无\n\n\n返回值:Array 数组元素进行去重后的新版本\n\n示例:原生 JavaScript var result = ['a', 'b', 'c', 'd', 'b', 'd'].unique(); // [a, b, c, d]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = ['a', 'b', 'c', 'c', 'd'].unique() // [a, b, c, d]\n }\n});\n\n" + }, + { + "title": "without(values: T[])", + "url": "/manual/3.0/array.html#withoutvalues-t[]", + "content": "without(values: T[])\n类型:Function\n\n\n功能描述:返回不包括参数中任意一个指定值的数组\n\n\n参数:values - any as T[] 排除值数组\n\n\n返回值:Array 不包括参数中任意一个指定值的数组\n\n示例:原生 JavaScript var result = ['a', 'b', 'c', 'd', 'b', 'd'].without('a', 'b'); // [c, d]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = ['a', 'b', 'c', 'd', 'b', 'd'].without('a', 'b') // [c, d]\n }\n});\n\n" + }, + { + "title": "clone()", + "url": "/manual/3.0/array.html#clone", + "content": "clone()\n类型:Function\n\n\n功能描述:克隆数组\n\n\n参数:无\n\n\n返回值:Array 克隆结果\n\n示例:原生 JavaScript var result = ['a', 'b'].clone(); // [a, b]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = ['a', 'b'].clone() // [a, b]\n }\n});\n\n" + }, + { + "title": "clear()", + "url": "/manual/3.0/array.html#clear", + "content": "clear()\n类型:Function\n\n\n功能描述:清空数组\n\n\n参数:无\n\n\n返回值:Array 空数组\n\n示例:原生 JavaScript var result = ['a', 'b'].clear(); // []\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = ['a', 'b'].clear() // []\n }\n});\n\n" + } + ] + }, + { + "title": "Date 参考手册", + "content": "", + "url": "/manual/3.0/date.html", + "children": [ + { + "title": "方法", + "url": "/manual/3.0/date.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nisLeapYear\n判断是否为闰年\n\n\ngetSeason\n获取季节\n\n\ngetDayOfYear\n获取年份中的第几天\n\n\ngetDaysOfYear\n获取年份总天数\n\n\nformat\n将日期时间格式化为字符串\n\n\n" + }, + { + "title": "isLeapYear()", + "url": "/manual/3.0/date.html#isleapyear", + "content": "isLeapYear()\n类型:Function\n\n\n功能描述:判断是否为闰年\n\n\n参数:无\n\n\n返回值:boolean 是闰年,返回 true;否则返回 false\n\n示例:原生 JavaScript var result = new Date('2000-04-11').isLeapYear(); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new Date('2000-04-11').isLeapYear() // false\n }\n});\n\n" + }, + { + "title": "getSeason()", + "url": "/manual/3.0/date.html#getseason", + "content": "getSeason()\n类型:Function\n\n\n功能描述:获取季节\n\n\n参数:无\n\n\n返回值:number 依次返回 0 至 3 的整数,表示春季、夏季、秋季、冬季\n\n示例:原生 JavaScript var result = new Date('2000-04-11').isLeapYear(); // 0\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new Date('2022-01-11').isLeapYear() // 3\n }\n});\n\n" + }, + { + "title": "getDayOfYear()", + "url": "/manual/3.0/date.html#getdayofyear", + "content": "getDayOfYear()\n类型:Function\n\n\n功能描述:获取年份中的第几天\n\n\n参数:无\n\n\n返回值:number 年份中的第几天\n\n示例:原生 JavaScript var result = new Date('2022-02-11').getDayOfYear(); // 42\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: number = new Date('2022-03-01').getDayOfYear(); // 61\n }\n});\n\n" + }, + { + "title": "getDaysOfYear()", + "url": "/manual/3.0/date.html#getdaysofyear", + "content": "getDaysOfYear()\n类型:Function\n\n\n功能描述:获取年份总天数\n\n\n参数:无\n\n\n返回值:number 年份总天数\n\n示例:原生 JavaScript var result = new Date('2022-02-11').getDaysOfYear(); // 365\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: number = new Date('2020-02-11').getDaysOfYear() // 366\n }\n});\n\n" + }, + { + "title": "format(format: string)", + "url": "/manual/3.0/date.html#formatformat-string", + "content": "format(format: string)\n类型:Function\n\n\n功能描述:将日期时间格式化为字符串\n\n\n参数:format - String format 格式字符串\n y - 年\n\n n - 季度(1 到 4)\n\n N - 季度名称\n\n A - 季度中文名称\n\n M - 月\n\n f - 月(Jan 到 Dec)\n\n F - 月(January 到 December)\n\n C - 月,中文名称\n\n d - 日\n\n Y - 年份中的第几天(0 到 365)\n\n T - 月份有几天(28 到 30)\n\n j - 每月天数后面的英文后缀(st,nd,rd 或者 th)\n\n e - 星期几,数字表示,0(表示星期天)到 6(表示星期六)\n\n E - 星期几,数字表示,1(表示星期一)到 7(表示星期天)\n\n l - 星期几,文本表示,3 个字母(Mon 到 Sun)\n\n L - 星期几,完整的文本格式(Sunday 到 Saturday)\n\n w - 星期几,中文名称\n\n W - 一月中第几个星期几\n\n i - 月份中的第几周\n\n o - 年份中的第几周\n\n h - 小时(1~12)\n\n H - 小时(0~23)\n\n m - 分\n\n s - 秒\n\n S - 毫秒\n\n a - 上午/下午标记\n\n O - 与格林威治时间相差的小时数\n\n P - 与格林威治时间相差的小时数,小时和分钟之间有冒号分隔\n \n Z - 时区\n\n\n\n返回值:string 格式化后的日期时间\n\n示例:原生 JavaScript var result = new Date('2022-01-11').format(\"f-dd,yyyy\"); // Jan-11,2022\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new Date('2022-01-11').format(\"f-dd,yy\"); // Jan-11,22\n }\n});\n\n" + } + ] + }, + { + "title": "Document 参考手册", + "content": "", + "url": "/manual/3.0/document.html", + "children": [ + { + "title": "属性", + "url": "/manual/3.0/document.html#属性", + "content": "属性\n\n属性\n描述\n\n\n\n\nfullScreen\n检测当前文档是否全屏\n\n\nfullScreenEnabled\n检测当前浏览器是否支持全屏模式\n\n\nfullScreenElement\n检测当前文档中正在以全屏模式显示的 Element 节点\n\n\nfullScreen\n检测当前文档是否全屏\n\n\nhttpCookie\nCookie 对象操作\n\n\n" + }, + { + "title": "方法", + "url": "/manual/3.0/document.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nrequestFullscreen\n请求进入全屏模式\n\n\nexitFullscreen\n退出全屏模式\n\n\n" + }, + { + "title": "readonly fullScreen", + "url": "/manual/3.0/document.html#readonly-fullscreen", + "content": "readonly fullScreen\n类型:Property\n\n\n功能描述:检测当前文档是否全屏\n\n\n参数:无\n\n\n返回值:boolean 当前文档是否全屏,返回 true;否则返回 false\n\n示例:原生 JavaScript var result = document.fullScreen;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = document.fullScreen;\n }\n});\n\n" + }, + { + "title": "readonly fullScreenEnabled", + "url": "/manual/3.0/document.html#readonly-fullscreenenabled", + "content": "readonly fullScreenEnabled\n类型:Property\n\n\n功能描述:检测当前浏览器是否支持全屏模式\n\n\n返回值:boolean 当前浏览器是否支持全屏模式返回 true;否则返回 false\n\n示例:原生 JavaScript var result = document.fullScreenEnabled;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = document.fullScreenEnabled\n }\n});\n\n" + }, + { + "title": "readonly fullScreenElement", + "url": "/manual/3.0/document.html#readonly-fullscreenelement", + "content": "readonly fullScreenElement\n类型:Property\n\n\n功能描述:检测当前文档中正在以全屏模式显示的 Element 节点\n\n\n返回值:boolean 当前文档中正在以全屏模式显示的 Element 节点,返回 true;否则返回 false\n\n示例:原生 JavaScript var result = document.fullScreenElement;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = document.fullScreenElement\n }\n});\n\n" + }, + { + "title": "requestFullscreen()", + "url": "/manual/3.0/document.html#requestfullscreen", + "content": "requestFullscreen()\n类型:Function\n\n\n功能描述:请求进入全屏模式\n\n\n参数:无\n\n\n返回值:Promise Promise\n\n示例:原生 JavaScript var result = document.requestFullscreen();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: Promise = document.requestFullscreen()\n }\n});\n\n" + }, + { + "title": "exitFullscreen()", + "url": "/manual/3.0/document.html#exitfullscreen", + "content": "exitFullscreen()\n类型:Function\n\n\n功能描述:退出全屏模式\n\n\n参数:无\n\n\n返回值:Promise Promise\n\n示例:原生 JavaScript var result = document.exitFullscreen();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: Promise = document.exitFullscreen()\n }\n});\n\n" + } + ] + }, + { + "title": "Cookie 参考手册", + "content": "", + "url": "/manual/3.0/cookie.html", + "children": [ + { + "title": "方法", + "url": "/manual/3.0/cookie.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\n[set](cookie.html#setname-string,-value-string-\n-null-\n\n\nget\n获取 Cookie\n\n\ndelete\n删除 Cookie\n\n\n" + }, + { + "title": "set(name: string, value: string | null | undefined, options?: CookieOptions)", + "url": "/manual/3.0/cookie.html#setname-string,-value-string-|-null-|-undefined,-options?-cookieoptions", + "content": "set(name: string, value: string | null | undefined, options?: CookieOptions)\n类型:Function\n\n\n功能描述:设置 Cookie\n\n\n参数:name - string Cookie 名称\n           value - string | null | undefined Cookie 值\n           options - CookieOptions Cookie 选项\n\n\n返回值:string Cookie 字符串\n\n示例:原生 JavaScript var result = document.httpCookie.set(\"name\", \"测试\");\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string | null = document.httpCookie.set(\"name\", \"测试\", {path: '/', domain: '*.test.com'})\n }\n});\n\n" + }, + { + "title": "get(name: string)", + "url": "/manual/3.0/cookie.html#getname-string", + "content": "get(name: string)\n类型:Function\n\n\n功能描述:获取 Cookie 值\n\n\n参数:name - string Cookie 名称\n\n\n返回值:string | null Cookie 值\n\n示例:原生 JavaScript var result = document.httpCookie.get(\"name\")\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string | null = document.httpCookie.get(\"name\")\n }\n});\n\n" + }, + { + "title": "delete(name: string, options?: CookieOptions)", + "url": "/manual/3.0/cookie.html#deletename-string,-options?-cookieoptions", + "content": "delete(name: string, options?: CookieOptions)\n类型:Function\n\n\n功能描述:删除 Cookie\n\n\n参数:name - string Cookie 名称\n           options - CookieOptions Cookie 选项\n\n\n返回值:无\n\n示例:原生 JavaScript var result = document.httpCookie.delete(\"name\");\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n document.httpCookie.delete(\"name\", \"测试\", {domain: '*.test.com'})\n }\n});\n\n" + } + ] + }, + { + "title": "Function 参考手册", + "content": "", + "url": "/manual/3.0/function.html", + "children": [ + { + "title": "方法", + "url": "/manual/3.0/function.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nargumentNames\n获取函数参数名称\n\n\ndelay\n延时执行函数\n\n\n" + }, + { + "title": "argumentNames(...args: any)", + "url": "/manual/3.0/function.html#argumentnames...args-any", + "content": "argumentNames(...args: any)\n类型:Function\n\n\n功能描述:获取函数参数名称\n\n\n参数:args - any 1个或多个任意类型的可变参数可变参数\n\n\n返回值:string[] | null 函数参数名称列表\n\n示例:原生 JavaScript var fn = function(a, b, c){\n\n }\n var result = fn.argumentNames();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const fn = function(a: boolean, b: number, c: String) {\n\n }\n const result: string[] | null = fn.argumentNames()\n }\n});\n\n" + }, + { + "title": "delay(timeout: number)", + "url": "/manual/3.0/function.html#delaytimeout-number", + "content": "delay(timeout: number)\n类型:Function\n\n\n功能描述:延时执行函数\n\n\n参数:timeout - number 延时时间(单位:秒)\n\n\n返回值:any 函数返回值\n\n示例:原生 JavaScript var fn = function(a, b, c){\n return a + b + c;\n }\n var result = fn.delay(3)\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const fn = function(a: boolean, b: number, c: number) {\n return a ? b : c\n }\n const result: any = fn.delay(3)\n }\n});\n\n" + } + ] + }, + { + "title": "Function 参考手册", + "content": "", + "url": "/manual/3.0/math.html", + "children": [ + { + "title": "方法", + "url": "/manual/3.0/math.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nrand\n延时执行函数\n\n\n" + }, + { + "title": "rand(min: number, max?: number)", + "url": "/manual/3.0/math.html#randmin-number,-max?-number", + "content": "rand(min: number, max?: number)\n类型:Function\n\n\n功能描述:产生一个指定范围内的随机数\n\n\n参数:min - number 返回的最低值\n           max - number 返回的最高值\n\n\n返回值:number 随机数\n\n示例:原生 JavaScript var result = Math.rand(1, 5); //\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: number = Math.rand(1, 5)\n }\n});\n\n" + } + ] + }, + { + "title": "Number 参考手册", + "content": "", + "url": "/manual/3.0/number.html", + "children": [ + { + "title": "方法", + "url": "/manual/3.0/number.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\ntoPaddedString\n延时执行函数\n\n\nisOdd\n判断数字是否为奇数\n\n\nisEven\n判断数字是否为偶数\n\n\nisBetween\n判断一个数字是否在另两个数字之间\n\n\n" + }, + { + "title": "toPaddedString(length: number, radix: number)", + "url": "/manual/3.0/number.html#topaddedstringlength-number,-radix-number", + "content": "toPaddedString(length: number, radix: number)\n类型:Function\n\n\n功能描述:数字填充\n\n\n参数:length - number 长度\n           radix - number 进制\n\n\n返回值:string 填充后的字符串数字\n\n示例:原生 JavaScript var result = new Number(5).toPaddedString(12, 2); // 0000000000101\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new Number(5).toPaddedString(12, 8) // 0000000000005\n }\n});\n\n" + }, + { + "title": "isOdd(num: number)", + "url": "/manual/3.0/number.html#isoddnum-number", + "content": "isOdd(num: number)\n类型:Function\n\n\n功能描述:判断数字是否为奇数\n\n\n参数:num - number 需要判断的数字\n\n\n返回值:boolean 数字是为奇数返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Number.isOdd(255); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Number.isOdd(256) // false\n }\n});\n\n" + }, + { + "title": "isEven(num: number)", + "url": "/manual/3.0/number.html#isevennum-number", + "content": "isEven(num: number)\n类型:Function\n\n\n功能描述:判断数字是否为偶数\n\n\n参数:num - number 需要判断的数字\n\n\n返回值:boolean 数字是为偶数返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Number.isEven(255); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Number.isOdd(256) // true\n }\n});\n\n" + }, + { + "title": "isBetween(num: number, min: number, max: number, match?: boolean | undefined)", + "url": "/manual/3.0/number.html#isbetweennum-number,-min-number,-max-number,-match?-boolean-|-undefined", + "content": "isBetween(num: number, min: number, max: number, match?: boolean | undefined)\n类型:Function\n\n\n功能描述:判断一个数字是否在另两个数字之间\n\n\n参数:num - number 需要判断的数字\n           min - number 最小值\n           max - number 最大值\n           match - boolean | undefined 是否包含最小值或最大值\n\n\n返回值:boolean 数字是否在另两个数字之间,返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Number.isBetween(4, 3, 5); // true\n var result = Number.isBetween(4, 4, 5); // false\n var result = Number.isBetween(4, 4, 5, true); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Number.isBetween(4, 3, 5) // true\n const result: boolean = Number.isBetween(4, 4, 5) // false\n const result: boolean = Number.isBetween(4, 4, 5, true) // true\n }\n});\n\n" + } + ] + }, + { + "title": "Object 参考手册", + "content": "", + "url": "/manual/3.0/object.html", + "children": [ + { + "title": "方法", + "url": "/manual/3.0/object.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\ntype\n获取对象数据类型\n\n\nrawType\n获取对象原始数据类型\n\n\nisObject\n判断对象是否为 object 类型\n\n\nisPlainObject\n判断对象是否为简单 object 类型\n\n\nisMap\n判断对象是否为 Map 类型\n\n\nisSet\n判断对象是否为 Set 类型\n\n\nisSymbol\n判断对象是否为 Symbol\n\n\nisPromise\n判断对象是否为 Promise\n\n\nisPrimitive\n判断对象是否为原始类型\n\n\nisFunction\n判断对象是否为函数\n\n\nisArray\n判断对象是否为数组\n\n\nisString\n判断对象是否为字符串对象\n\n\nisNumber\n判断对象是否为数字对象\n\n\nisBoolean\n判断对象是否为布尔对象\n\n\nisRegExp\n判断对象是否为正则对象\n\n\nisFile\n判断对象是否为文件对象\n\n\nisWindow\n判断对象是否为 windows 对象\n\n\nisElement\n判断对象是否为 Element\n\n\nisEvent\n判断对象是否为事件对象\n\n\nisNull\n判断对象是否为 null 对象\n\n\nisUndefined\n判断对象是否为未定义\n\n\nisUndefinedOrNull\n判断对象是否为未定义或 null\n\n\nequals\n深度判断两个对象是否相等\n\n\nclone\n克隆对象\n\n\nomit\n克隆对象,但支持删除指定属性\n\n\n" + }, + { + "title": "type(obj: any)", + "url": "/manual/3.0/object.html#typeobj-any", + "content": "type(obj: any)\n类型:Function\n\n\n功能描述:获取对象数据类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:string 对象数据类型\n\n示例:原生 JavaScript var result = Object.type(true); // boolean\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = Object.type(4.4) // number\n }\n});\n\n" + }, + { + "title": "rawType(obj: any)", + "url": "/manual/3.0/object.html#rawtypeobj-any", + "content": "rawType(obj: any)\n类型:Function\n\n\n功能描述:获取对象原始数据类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:string 原始数据类型\n\n示例:原生 JavaScript var result = Object.type(\"4.4\"); // String\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = Object.type(4.4) // Number\n }\n});\n\n" + }, + { + "title": "isObject(obj: any)", + "url": "/manual/3.0/object.html#isobjectobj-any", + "content": "isObject(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 object 类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为 object 类型返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isObject(\"1\"); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isObject(new String(\"1\")) // true\n }\n});\n\n" + }, + { + "title": "isPlainObject(obj: any)", + "url": "/manual/3.0/object.html#isplainobjectobj-any", + "content": "isPlainObject(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为简单 object 类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为简单 object 类型返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isPlainObject(new String(\"1\")); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isPlainObject({\"a\":\"A\"}) // true\n }\n});\n\n" + }, + { + "title": "isMap(obj: any)", + "url": "/manual/3.0/object.html#ismapobj-any", + "content": "isMap(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 Map 类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为 Map 类型返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isMap(new Map()); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isMap({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isSet(obj: any)", + "url": "/manual/3.0/object.html#issetobj-any", + "content": "isSet(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 Map 类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为 Set 类型返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isSet(new Set()); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isSet({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isSymbol(obj: any)", + "url": "/manual/3.0/object.html#issymbolobj-any", + "content": "isSymbol(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 Symbol\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为 Symbol 返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isSymbol(Symbol('a')); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isSymbol({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isPromise(obj: any)", + "url": "/manual/3.0/object.html#ispromiseobj-any", + "content": "isPromise(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 Promise\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为 Promise 返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isPromise(new Promise(function(){})); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isPromise({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isPrimitive(obj: any)", + "url": "/manual/3.0/object.html#isprimitiveobj-any", + "content": "isPrimitive(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为原始类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为原始类型返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isPrimitive(11); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isPromise({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isFunction(obj: any)", + "url": "/manual/3.0/object.html#isfunctionobj-any", + "content": "isFunction(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为函数\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为函数返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isFunction(location.href); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isFunction(\"a\".replace) // true\n }\n});\n\n" + }, + { + "title": "isArray(obj: any)", + "url": "/manual/3.0/object.html#isarrayobj-any", + "content": "isArray(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为数组\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为数组返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isArray([1, 2]); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isArray({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isString(obj: any)", + "url": "/manual/3.0/object.html#isstringobj-any", + "content": "isString(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为字符串对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为字符串返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isString(1); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isString(\"1\") // true\n }\n});\n\n" + }, + { + "title": "isNumber(obj: any)", + "url": "/manual/3.0/object.html#isnumberobj-any", + "content": "isNumber(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为数字对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为数字对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isNumber(1.0); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isNumber(\"1.0\") // false\n }\n});\n\n" + }, + { + "title": "isBoolean(obj: any)", + "url": "/manual/3.0/object.html#isbooleanobj-any", + "content": "isBoolean(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为布尔对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为布尔对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isBoolean(false); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isBoolean(1) // false\n }\n});\n\n" + }, + { + "title": "isRegExp(obj: any)", + "url": "/manual/3.0/object.html#isregexpobj-any", + "content": "isRegExp(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为正则对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为正则对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isRegExp(/^[a-z]$/); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isRegExp('/^[a-z]$/') // false\n }\n});\n\n" + }, + { + "title": "isFile(obj: any)", + "url": "/manual/3.0/object.html#isfileobj-any", + "content": "isFile(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为文件对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为文件对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isFile(new File(['text1', 'text2'], 'test.txt', {type: 'text/plain'})); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = bject.isFile(document) // false\n }\n});\n\n" + }, + { + "title": "isWindow(obj: any)", + "url": "/manual/3.0/object.html#iswindowobj-any", + "content": "isWindow(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 windows 对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为 windows 对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isWindow(window); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isWindow(document) // false\n }\n});\n\n" + }, + { + "title": "isElement(obj: any)", + "url": "/manual/3.0/object.html#iselementobj-any", + "content": "isElement(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 Element\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为 Element 返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isElement(document); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isElement(document.body) // false\n }\n});\n\n" + }, + { + "title": "isEvent(obj: any)", + "url": "/manual/3.0/object.html#iseventobj-any", + "content": "isEvent(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为事件对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为事件对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isEvent(document.onclick); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isEvent(document.onclick) // false\n }\n});\n\n" + }, + { + "title": "isNull(obj: any)", + "url": "/manual/3.0/object.html#isnullobj-any", + "content": "isNull(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 null\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为 null 返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isNull(null); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isNull(\"A\") // false\n }\n});\n\n" + }, + { + "title": "isUndefined(obj: any)", + "url": "/manual/3.0/object.html#isundefinedobj-any", + "content": "isUndefined(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为未定义\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为未定义返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isUndefined(a); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isUndefined(b) // true\n }\n});\n\n" + }, + { + "title": "isUndefinedOrNull(obj: any)", + "url": "/manual/3.0/object.html#isundefinedornullobj-any", + "content": "isUndefinedOrNull(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为未定义或 null\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为未定义或 null 返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isUndefinedOrNull(a); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isUndefinedOrNull(document.body) // false\n }\n});\n\n" + }, + { + "title": "equals(obj1: any, obj2: any)", + "url": "/manual/3.0/object.html#equalsobj1-any,-obj2-any", + "content": "equals(obj1: any, obj2: any)\n类型:Function\n\n\n功能描述:深度判断两个对象是否相等\n\n\n参数:obj1 - any 一个对象\n           obj2 - any 用于和 obj1 比较的对象\n\n\n返回值:boolean 当两个对象相等时,返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = Object.equals(\"a\", \"A\"); // false\n var result = Object.equals(\"a\", \"a\"); // true\n var result = Object.equals(1, 1.0); // true\n var result = Object.equals([1], [1.0]); // true\n var result = Object.equals([1], [1.0, 1.1]); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.equals(\"a\", \"A\") // false\n const result: boolean = Object.equals(\"a\", \"a\") // true\n const result: boolean = Object.equals(1, 1.0) // true\n const result: boolean = Object.equals([1], [1.0]) // true\n const result: boolean = Object.equals([1], [1.0, 1.1]) // false\n }\n});\n\n" + }, + { + "title": "clone(obj: any)", + "url": "/manual/3.0/object.html#cloneobj-any", + "content": "clone(obj: any)\n类型:Function\n\n\n功能描述:克隆对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:any 新对象实例\n\n示例:原生 JavaScript var result = Object.clone({\"a\": \"A\"}); // {\"a\": \"A\"}\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: any = Object.clone({\"a\":\"A\"}) // {\"a\": \"A\"}\n }\n});\n\n" + }, + { + "title": "omit(obj: T, ...fields: K[])", + "url": "/manual/3.0/object.html#omitobj-t,-...fields-k[]", + "content": "omit(obj: T, ...fields: K[])\n类型:Function\n\n\n功能描述:克隆对象,但支持删除指定属性\n\n\n参数:obj - object 任意对象\n           fields - K[] 需要删除的属性\n\n\n返回值:any 新对象实例\n\n示例:原生 JavaScript var source = {\n id: 1,\n name: 'buession',\n year: 2023\n };\n var result = Object.omit(source, \"id\", \"year\"); // {\"name\": \"buession\"}\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const source = {\n id: 1,\n name: 'buession',\n year: 2023\n };\n const result = Object.omit(source, \"id\", \"year\") // {\"name\": \"buession\"}\n }\n});\n\n" + } + ] + }, + { + "title": "String 参考手册", + "content": "", + "url": "/manual/3.0/string.html", + "children": [ + { + "title": "方法", + "url": "/manual/3.0/string.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nexists\n判断字符串是否存在\n\n\nequals\n判断字符串是否相等\n\n\nequalsIgnoreCase\n判断字符串是否相等,不考虑大小写\n\n\nisEmpty\n判断是否为空字符串\n\n\nisNotEmpty\n判断是否不为空字符串\n\n\nisBlank\n判断是否为空白字符串\n\n\nrepeat\n重复一个字符串\n\n\nleft\n截取字符串左边边指定数目的字符串\n\n\nright\n截取字符串右边指定数目的字符串\n\n\ntruncation\n截取字符串,超出部分用 truncation 替代\n\n\nltrim\n删除字符串开头的空白字符\n\n\nrtrim\n删除字符串结尾的空白字符\n\n\nstartsWith\n判断字符串是否以给定的字符串开头\n\n\nendsWith\n判断字符串是否以给定的字符串结尾\n\n\nlcfirst\n首字母小写\n\n\nucfirst\n首字母大写\n\n\nescapeHTML\n将 HTML 编码\n\n\nunescapeHTML\n将 HTML 实体字符解码\n\n\nstripTag\n删除 HTML 标签\n\n\nstripTags\n批量删除 HTML 标签\n\n\nstripScripts\n删除 script 标签\n\n\ntoArray\n将字符串转换为数组\n\n\ninspect\n返回一个数组的字符串表示形式\n\n\nhashCode\n获取字符串 hash code\n\n\nrandom\n生成随机字符串\n\n\n" + }, + { + "title": "exists(str: string)", + "url": "/manual/3.0/string.html#existsstr-string", + "content": "exists(str: string)\n类型:Function\n\n\n功能描述:判断字符串是否存在\n\n\n参数:str - string 子字符串\n\n\n返回值:boolean 子字符串存在返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \"ABC\".exists(\"A\"); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = \"ABC\".exists(\"a\") // false\n }\n});\n\n" + }, + { + "title": "equals(str: string | undefined | null)", + "url": "/manual/3.0/string.html#equalsstr-string-|-undefined-|-null", + "content": "equals(str: string | undefined | null)\n类型:Function\n\n\n功能描述:判断字符串是否相等\n\n\n参数:str - string | undefined | null 与此 String 进行比较的对象\n\n\n返回值:boolean 字符串相等返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \"A\".equals(new String(\"A\")); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = \"A\".equals(\"a\") // false\n }\n});\n\n" + }, + { + "title": "equalsIgnoreCase(str: string | undefined | null)", + "url": "/manual/3.0/string.html#equalsignorecasestr-string-|-undefined-|-null", + "content": "equalsIgnoreCase(str: string | undefined | null)\n类型:Function\n\n\n功能描述:判断字符串是否相等,不考虑大小写\n\n\n参数:str - string | undefined | null 与此 String 进行比较的对象\n\n\n返回值:boolean 字符串相等返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \"A\".equalsIgnoreCase(\"a\"); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"a\").equalsIgnoreCase(\"1\") // false\n }\n});\n\n" + }, + { + "title": "isEmpty()", + "url": "/manual/3.0/string.html#isempty", + "content": "isEmpty()\n类型:Function\n\n\n功能描述:判断是否为空字符串\n\n\n参数:无\n\n\n返回值:boolean 字符串为空,即长度为 0 返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \" \".isEmpty(); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"\").isEmpty() // true\n }\n});\n\n" + }, + { + "title": "isNotEmpty()", + "url": "/manual/3.0/string.html#isnotempty", + "content": "isNotEmpty()\n类型:Function\n\n\n功能描述:判断是否不为空字符串\n\n\n参数:无\n\n\n返回值:boolean 字符串不为空,即长度大于 0 返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \" \".isNotEmpty(); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"\").isNotEmpty() // false\n }\n});\n\n" + }, + { + "title": "isBlank()", + "url": "/manual/3.0/string.html#isblank", + "content": "isBlank()\n类型:Function\n\n\n功能描述:判断是否为空白字符串\n\n\n参数:无\n\n\n返回值:boolean 字符串全为空白字符串(即:空格、回车、Tag 制表位、非打印字符)返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \" \".isBlank(); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"\\t\\n\").isBlank() // true\n }\n});\n\n" + }, + { + "title": "repeat(count: number)", + "url": "/manual/3.0/string.html#repeatcount-number", + "content": "repeat(count: number)\n类型:Function\n\n\n功能描述:重复一个字符串\n\n\n参数:count - number 重复次数\n\n\n返回值:string 重复后的字符串\n\n示例:原生 JavaScript var result = \"A\".repeat(3); // AAA\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"Abc\".repeat(3) // AbcAbcAbc\n }\n});\n\n" + }, + { + "title": "left(length: number)", + "url": "/manual/3.0/string.html#leftlength-number", + "content": "left(length: number)\n类型:Function\n\n\n功能描述:截取字符串左边边指定数目的字符串\n\n\n参数:length - number 截取长度\n\n\n返回值:string 子字符串,length 如果为负数,则返回空字符串\n\n示例:原生 JavaScript var result = \"Abc\".left(1); // A\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"Abc\".left(-1) // \"\"\n }\n});\n\n" + }, + { + "title": "right(length: number)", + "url": "/manual/3.0/string.html#rightlength-number", + "content": "right(length: number)\n类型:Function\n\n\n功能描述:截截取字符串右边指定数目的字符串\n\n\n参数:length - number 截取长度\n\n\n返回值:string 子字符串,length 如果为负数,则返回空字符串\n\n示例:原生 JavaScript var result = \"Abc\".right(1); // c\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"Abc\".right(-1) // \"\"\n }\n});\n\n" + }, + { + "title": "truncation(length: number, truncation?: string = \"...\")", + "url": "/manual/3.0/string.html#truncationlength-number,-truncation?-string-=-\"...\"", + "content": "truncation(length: number, truncation?: string = \"...\")\n类型:Function\n\n\n功能描述:截取字符串,超出部分用 truncation 替代\n\n\n参数:length - number 截取长度\n\n             truncation - string 替换字符串返回值:string 截取后的字符串;实际截取长度:当 length 小于等于 truncation 的长度时为,length;当 length 大于 truncation 的长度时为,length - truncation.length\n示例:原生 JavaScript var result = \"Abc\".truncation(1, \"...\"); // A...\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"Abc\".truncation(6, \"...\") // Abc\n }\n});\n\n" + }, + { + "title": "ltrim()", + "url": "/manual/3.0/string.html#ltrim", + "content": "ltrim()\n类型:Function\n\n\n功能描述:删除字符串开头的空白字符(包括:空格、制表位、换行以及其它非打印字符)\n\n\n参数:无\n\n\n返回值:string 删除了字符串最左边的空白字符的字符串\n\n示例:原生 JavaScript var result = \" Abc\".ltrim(); // \"Abc\"\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new String(\" Abc \").ltrim() // \"Abc \"\n }\n});\n\n" + }, + { + "title": "rtrim()", + "url": "/manual/3.0/string.html#rtrim", + "content": "rtrim()\n类型:Function\n\n\n功能描述:删除字符串结尾的空白字符(包括:空格、制表位、换行以及其它非打印字符)\n\n\n参数:无\n\n\n返回值:string 删除了字符串最右边的空白字符的字符串\n\n示例:原生 JavaScript var result = \" Abc\".rtrim(); // \" Abc\"\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new String(\" Abc \").rtrim() // \" Abc\"\n }\n});\n\n" + }, + { + "title": "startsWith(str: string)", + "url": "/manual/3.0/string.html#startswithstr-string", + "content": "startsWith(str: string)\n类型:Function\n\n\n功能描述:判断字符串是否以给定的字符串开头\n\n\n参数:str - string 搜索的字符串\n\n\n返回值:boolean 字符串是否以给定的字符串开头返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \"Abc\".startsWith(\"a\"); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"aBc\").startsWith(\"a\") // true\n }\n});\n\n" + }, + { + "title": "endsWith(str: string)", + "url": "/manual/3.0/string.html#endswithstr-string", + "content": "endsWith(str: string)\n类型:Function\n\n\n功能描述:判断字符串是否以给定的字符串结尾\n\n\n参数:str - string 搜索的字符串\n\n\n返回值:boolean 字符串是否以给定的字符串结尾返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \"Abc\".endsWith(\"C\"); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"aBc\").endsWith(\"c\") // true\n }\n});\n\n" + }, + { + "title": "lcfirst()", + "url": "/manual/3.0/string.html#lcfirst", + "content": "lcfirst()\n类型:Function\n\n\n功能描述:首字母小写\n\n\n参数:无\n\n\n返回值:string 首字母小写后的字符串\n\n示例:原生 JavaScript var result = \"Abc\".lcfirst(); // \"abc\"\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new String(\"abc\").lcfirst() // \"abc\"\n }\n});\n\n" + }, + { + "title": "ucfirst()", + "url": "/manual/3.0/string.html#ucfirst", + "content": "ucfirst()\n类型:Function\n\n\n功能描述:首字母大写\n\n\n参数:无\n\n\n返回值:string 首字母大写后的字符串\n\n示例:原生 JavaScript var result = \"abc\".ucfirst(); // \"Abc\"\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new String(\"abc\").lcfirst() // \"Abc\"\n }\n});\n\n" + }, + { + "title": "escapeHTML()", + "url": "/manual/3.0/string.html#escapehtml", + "content": "escapeHTML()\n类型:Function\n\n\n功能描述:将 HTML 编码,参考:https://www.w3school.com.cn/html/html_entities.asp\n\n\n参数:无\n\n\n返回值:string 编码后的字符串\n\n示例:原生 JavaScript var result = \"test\".escapeHTML(); // <a href='https://www.domain.com'>test</a>\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new String(\"test\").lcfirst() // <a href='https://www.domain.com'>test</a>\n }\n});\n\n" + }, + { + "title": "unescapeHTML()", + "url": "/manual/3.0/string.html#unescapehtml", + "content": "unescapeHTML()\n类型:Function\n\n\n功能描述:将 HTML 实体字符解码,参考:https://www.w3school.com.cn/html/html_entities.asp\n\n\n参数:无\n\n\n返回值:string 解码后的字符串\n\n示例:原生 JavaScript var result = \"<a href='https://www.domain.com'>test</a>\".unescapeHTML(); // test\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"<a href='https://www.domain.com'>test</a>\".unescapeHTML() // test\n }\n});\n\n" + }, + { + "title": "stripTag(tag: string)", + "url": "/manual/3.0/string.html#striptagtag-string", + "content": "stripTag(tag: string)\n类型:Function\n\n\n功能描述:删除 HTML 标签\n\n\n参数:tag - string 待删除标签\n\n\n返回值:string 删除标签后的字符串\n\n示例:原生 JavaScript var result = \"test\".stripTag(\"a\"); // test\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"test\".stripTag(\"a\") // test\n }\n});\n\n" + }, + { + "title": "stripTags(tag: string)", + "url": "/manual/3.0/string.html#striptagstag-string", + "content": "stripTags(tag: string)\n类型:Function\n\n\n功能描述:批量删除 HTML 标签\n\n\n参数:tag - string[] | string 删除指定的标签\n\n\n返回值:string 删除标签后的字符串\n\n示例:原生 JavaScript var result = \"testEM\".stripTags([\"a\", \"i\"]); // testEM\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"testEM\".stripTags([\"a\", \"i\"]) // testEM\n }\n});\n\n" + }, + { + "title": "stripScripts()", + "url": "/manual/3.0/string.html#stripscripts", + "content": "stripScripts()\n类型:Function\n\n\n功能描述:删除 script 标签\n\n\n参数:无\n\n\n返回值:string 删除 script 标签后的字符串\n\n示例:原生 JavaScript var result = 'alert(\"test\");test'.stripScripts(); // test\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = 'alert(\"test\");test'.stripScripts() // \n" + }, + { + "title": "toArray(delimiter: string)", + "url": "/manual/3.0/string.html#toarraydelimiter-string", + "content": "toArray(delimiter: string)\n类型:Function\n\n\n功能描述:将字符串转换为数组\n\n\n参数:delimiter - string 分隔字符\n\n\n返回值:string[] 字符串数组\n\n示例:原生 JavaScript var result = \"a|b|c\".toArray('|'); // [ \"a\", \"b\", \"c\" ]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = \"a|b||c\".toArray('||') // [ \"a|b\", \"c\" ]\n }\n});\n\n" + }, + { + "title": "inspect(useDoubleQuotes: boolean)", + "url": "/manual/3.0/string.html#inspectusedoublequotes-boolean", + "content": "inspect(useDoubleQuotes: boolean)\n类型:Function\n\n\n功能描述:返回一个数组的字符串表示形式\n\n\n参数:useDoubleQuotes - boolean 是否使用双引号引住\n\n\n返回值:string 数组的字符串表示形式\n\n示例:原生 JavaScript var result = \"a|b|c\".inspect(true); // \\\"a|b|c\\\"\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"a|b|c\".inspect(false) // 'a|b|c'\n }\n});\n\n" + }, + { + "title": "hashCode()", + "url": "/manual/3.0/string.html#hashcode", + "content": "hashCode()\n类型:Function\n\n\n功能描述:获取字符串 hash code\n\n\n参数:无\n\n\n返回值:number 字符串的 hash code\n\n示例:原生 JavaScript var result = \"abc\".hashCode(); // 96354\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: number = \"abcABC\".hashCode() // 2870546592\n }\n});\n\n" + }, + { + "title": "random(length: number, type?: RandomType = \"NUMERIC\" | \"LETTER\" | \"LETTER_NUMERIC\" | \"CHINESE\" | undefined)", + "url": "/manual/3.0/string.html#randomlength-number,-type?-randomtype-=-\"numeric\"-|-\"letter\"-|-\"letter_numeric\"-|-\"chinese\"-|-undefined", + "content": "random(length: number, type?: RandomType = \"NUMERIC\" | \"LETTER\" | \"LETTER_NUMERIC\" | \"CHINESE\" | undefined)\n类型:Function\n\n\n功能描述:生成随机字符串\n\n\n参数:length - number 生成字符串的长度\n\n             type - NUMERIC | LETTER | LETTER_NUMERIC | CHINESE | undefined 生成类型,可选参数,当未指定时为 LETTER_NUMERIC NUMERIC - 数字随机字符串\n LETTER - 英文随机字符串\n\n LETTER_NUMERIC - 英文数字混合随机字符串\n\n CHINESE - 中文随机字符串\n返回值:string 随机字符串\n示例:原生 JavaScript var result = String.random(6); // 1Diim2\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = String.random(6, \"NUMERIC\") // 881773\n }\n});\n\n" + } + ] + }, + { + "title": "Window 参考手册", + "content": "", + "url": "/manual/3.0/window.html", + "children": [ + { + "title": "属性", + "url": "/manual/3.0/window.html#属性", + "content": "属性\n\n属性\n描述\n\n\n\n\nbrowser\n浏览器信息对象\n\n\nlocation\nLocation 对象\n\n\n" + }, + { + "title": "方法", + "url": "/manual/3.0/window.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\ncopy\n将字符串复制到剪贴板\n\n\ndelay\n延时执行方法\n\n\n" + }, + { + "title": "copy(str: string)", + "url": "/manual/3.0/window.html#copystr-string", + "content": "copy(str: string)\n类型:Function\n\n\n功能描述:将字符串复制到剪贴板\n\n\n参数:str - string 字符串\n\n\n返回值:无\n\n示例:原生 JavaScript window.copy(\"这是要复制的字符串\");\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n window.copy(\"这是要复制的字符串\")\n }\n});\n\n" + }, + { + "title": "delay(func: Function, wait?: number, ...args: any)", + "url": "/manual/3.0/window.html#delayfunc-function,-wait?-number,-...args-any", + "content": "delay(func: Function, wait?: number, ...args: any)\n类型:Function\n\n\n功能描述:延时执行\n\n\n参数:func - Function 方法\n             wait - number 延时时长(单位:毫秒)\n             args - any[] 方法参数\n\n\n返回值:any\n\n示例:原生 JavaScript window.delay(function () {\n location.href = \"/\";\n }, 3000);\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n window.delay(function () {\n // code\n });\n }\n});\n\n" + }, + { + "title": "Browser", + "url": "/manual/3.0/window.html#browser", + "content": "Browser" + }, + { + "title": "Location", + "url": "/manual/3.0/window.html#location", + "content": "Location" + } + ] + }, + { + "title": "HttpCookie 参考手册", + "content": "", + "url": "/manual/3.0/browser.html", + "children": [ + { + "title": "属性", + "url": "/manual/3.0/browser.html#属性", + "content": "属性\n\n属性\n描述\n\n\n\n\nuserAgent\n获取浏览器 User-Agent\n\n\nname\n获取浏览器应用程序名称\n\n\nisMobile\n是否为移动设备\n\n\nisChrome\n是否为 Chrome 浏览器\n\n\nisFirefox\n是否为 Firefox 浏览器\n\n\nisMozilla\n是否为 Mozilla 浏览器\n\n\nisMSIE\n是否为 IE 浏览器\n\n\nisOpera\n是否为 Opera 浏览器\n\n\nisSafari\n是否为 Safari 浏览器\n\n\nisNetscape\n是否为 Netscape 浏览器\n\n\n" + }, + { + "title": "readonly userAgent", + "url": "/manual/3.0/browser.html#readonly-useragent", + "content": "readonly userAgent\n类型:Property\n\n\n功能描述:获取浏览器 User-Agent,等价于 navigator.userAgent\n\n\n返回值:string 浏览器 User-Agent\n\n示例:原生 JavaScript var result = window.browser.userAgent; // Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: String = window.browser.userAgent // Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0\n }\n});\n\n" + }, + { + "title": "readonly name", + "url": "/manual/3.0/browser.html#readonly-name", + "content": "readonly name\n类型:Property\n\n\n功能描述:获取浏览器应用程序名称,等价于 navigator.appName\n\n\n返回值:string 浏览器应用程序名称\n\n示例:原生 JavaScript var result = window.browser.name; // Netscape\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: String = window.browser.name // Netscape\n }\n});\n\n" + }, + { + "title": "readonly isMobile", + "url": "/manual/3.0/browser.html#readonly-ismobile", + "content": "readonly isMobile\n类型:Property\n\n\n功能描述:是否为移动设备,检测依据:User-Agent 中含有 Android、iPhone、iPod、Windows Phone、Mobile、Coolpad、mmp、SmartPhone、midp、wap、xoom、Symbian、J2ME、Blackberry、Wince 其中任意一个字符串\n\n\n返回值:boolean 是移动设备返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isMobile\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isMobile\n }\n});\n\n" + }, + { + "title": "readonly isChrome", + "url": "/manual/3.0/browser.html#readonly-ischrome", + "content": "readonly isChrome\n类型:Property\n\n\n功能描述:是否为 Chrome 浏览器\n\n\n返回值:boolean 是 Chrome 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isChrome;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isChrome\n }\n});\n\n" + }, + { + "title": "readonly isFirefox", + "url": "/manual/3.0/browser.html#readonly-isfirefox", + "content": "readonly isFirefox\n类型:Property\n\n\n功能描述:是否为 Firefox 浏览器\n\n\n返回值:boolean 是 Firefox 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isFirefox;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isFirefox\n }\n});\n\n" + }, + { + "title": "readonly isMSIE", + "url": "/manual/3.0/browser.html#readonly-ismsie", + "content": "readonly isMSIE\n类型:Property\n\n\n功能描述:是否为 IE 浏览器\n\n\n返回值:boolean 是 IE 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isMSIE;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isMSIE\n }\n});\n\n" + }, + { + "title": "readonly isOpera", + "url": "/manual/3.0/browser.html#readonly-isopera", + "content": "readonly isOpera\n类型:Property\n\n\n功能描述:是否为 Opera 浏览器\n\n\n返回值:boolean 是 Opera 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isOpera;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isOpera\n }\n});\n\n" + }, + { + "title": "readonly isSafari", + "url": "/manual/3.0/browser.html#readonly-issafari", + "content": "readonly isSafari\n类型:Property\n\n\n功能描述:是否为 Safari 浏览器\n\n\n返回值:boolean 是 Safari 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isSafari;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isSafari\n }\n});\n\n" + }, + { + "title": "readonly isNetscape", + "url": "/manual/3.0/browser.html#readonly-isnetscape", + "content": "readonly isNetscape\n类型:Property\n\n\n功能描述:是否为 Netscape 浏览器\n\n\n返回值:boolean 是 Netscape 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isNetscape;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isNetscape\n }\n});\n\n" + } + ] + }, + { + "title": "Location 参考手册", + "content": "", + "url": "/manual/3.0/location.html", + "children": [ + { + "title": "方法", + "url": "/manual/3.0/location.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\ngetParameters\n获取所有的请求参数及值\n\n\ngetParameter\n获取指定请求参数的值\n\n\n" + }, + { + "title": "getParameters()", + "url": "/manual/3.0/location.html#getparameters", + "content": "getParameters()\n类型:Function\n\n\n功能描述:获取所有的请求参数及值\n\n\n参数:无\n\n\n返回值:Record 当前请求 URL 中的所有的请求参数及值\n\n示例:原生 JavaScript var result = location.getParameters();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: Record = location.getParameters()\n }\n});\n\n" + }, + { + "title": "getParameter(name: string)", + "url": "/manual/3.0/location.html#getparametername-string", + "content": "getParameter(name: string)\n类型:Function\n\n\n功能描述:获取指定请求参数的值\n\n\n参数:string 参数名称\n\n\n返回值:any 请求参数的值\n\n示例:原生 JavaScript var result = location.getParameter(\"action\");\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: any = location.getParameter('action');\n }\n});\n\n" + } + ] + }, + { + "title": "API", + "content": "Buession Prototype API 包含以下目录:PrototypeTryOptionalArrayDateDocumentFunctionMathNumberObjectStringWindow", + "url": "/manual/2.2/index.html", + "children": [] + }, + { + "title": "Prototype 参考手册", + "content": "", + "url": "/manual/2.2/prototype.html", + "children": [ + { + "title": "属性", + "url": "/manual/2.2/prototype.html#属性", + "content": "属性\n\n属性\n描述\n\n\n\n\nversion\n获取 Buession Prototype 版本\n\n\n" + }, + { + "title": "方法", + "url": "/manual/2.2/prototype.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nemptyFunction\n执行一个空方法\n\n\nK\n返回参数传递的任意值\n\n\n" + }, + { + "title": "version", + "url": "/manual/2.2/prototype.html#version", + "content": "version\n类型:String\n\n\n功能描述:获取 Buession Prototype 版本\n\n\n返回值:Buession Prototype 版本\n\n示例:原生 JavaScript var ver = Prototype.version;\n\nvue \n Prototype 版本:{Prototype.version}\n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n }\n});\n\n" + }, + { + "title": "emptyFunction()", + "url": "/manual/2.2/prototype.html#emptyfunction", + "content": "emptyFunction()\n类型:Function\n\n\n功能描述:执行一个空方法\n\n\n参数:无\n\n\n返回值:void\n\n示例:原生 JavaScript Prototype.emptyFunction();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n Prototype.emptyFunction()\n }\n});\n\n" + }, + { + "title": "K(x: any)", + "url": "/manual/2.2/prototype.html#kx-any", + "content": "K(x: any)\n类型:Function\n\n\n功能描述:返回参数传递的任意值\n\n\n参数:x - any 任意值\n\n\n返回值:any 参数传递的任意值\n\n示例:原生 JavaScript var v = Prototype.K(object);\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const v: any = Prototype.K(object)\n }\n});\n\n" + } + ] + }, + { + "title": "Try 参考手册", + "content": "", + "url": "/manual/2.2/try.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.2/try.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nthese\n接收任意数目的函数作为参数,返回第一个执行成功的函数(未抛出异常的函数)的结果\n\n\n" + }, + { + "title": "these(args: any[])", + "url": "/manual/2.2/try.html#theseargs-any[]", + "content": "these(args: any[])\n类型:Function\n\n\n功能描述:接收任意数目的函数作为参数,返回第一个执行成功的函数(未抛出异常的函数)的结果\n\n\n参数:args any[] 一个或多个 function 作为参数\n\n\n返回值:any 任意函数参数执行结果\n\n示例:原生 JavaScript var result = Try.these(function(){\n\n },\n\n function() {\n\n });\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result:any = Try.these(function(){\n\n },\n\n function() {\n\n })\n }\n});\n\n" + } + ] + }, + { + "title": "Optional 参考手册", + "content": "Optional 类是一个可以为 null 或 undefined 的容器对象,如果值 value 存在则 isPresent() 方法会返回 true,调用 get() 方法会返回 value 的值。其设计思想,参考 java8 的 Optional使用方式,在构造函数中传入任意类型值;Optional 提供很多有用的方法,这样我们就不用显式进行 null 值和 undefined 的检测。", + "url": "/manual/2.2/optional.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.2/optional.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nof\n返回一个指定 T 类型的值的 Optional 实例\n\n\nofNullable\n如果为非 null 或 undefined,返回 Optional 描述的指定值的实例,否则返回空的 Optional 实例\n\n\nempty\n返回空的 Optional 实例\n\n\nget\n如果 value 不为 null 或 undefined,则返回 value 的值;否则抛出异常\n\n\norElse\n如果 value 不为 null 或 undefined,则返回 value 的值;否则返回 other\n\n\nisPresent\n如果 value 不为 null 或 undefined,则返回 true;否则返回 false\n\n\n var optional = new Optional(any value);\n\n" + }, + { + "title": "static of(value: T)", + "url": "/manual/2.2/optional.html#static-ofvalue-t", + "content": "static of(value: T)\n类型:Function\n\n\n功能描述:返回一个指定 T 类型的值的 Optional 实例\n\n\n参数:value - any of T 任意类型的值\n\n\n返回值:Object T 类型的值的 Optional 实例\n\n示例:原生 JavaScript Optional.of(11);\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: boolean = Optional.of(false)\n }\n});\n\n" + }, + { + "title": "static ofNullable(value: T)", + "url": "/manual/2.2/optional.html#static-ofnullablevalue-t", + "content": "static ofNullable(value: T)\n类型:Function\n\n\n功能描述:如果为非 null 或 undefined,返回 Optional 描述的指定值的实例,否则返回空的 Optional 实例\n\n\n参数:value - any as T 任意类型的值\n\n\n返回值:Object T 类型的值的 Optional 实例,或空的 Optional 实例\n\n示例:原生 JavaScript Optional.ofNullable('js');\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: number = Optional.ofNullable(11)\n }\n});\n\n" + }, + { + "title": "static empty()", + "url": "/manual/2.2/optional.html#static-empty", + "content": "static empty()\n类型:Function\n\n\n功能描述:返回空的 Optional 实例\n\n\n参数:无\n\n\n返回值:Object as Optional 空的 Optional 实例\n\n示例:原生 JavaScript Optional.empty();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: null Optional.empty()\n }\n});\n\n" + }, + { + "title": "get()", + "url": "/manual/2.2/optional.html#get", + "content": "get()\n类型:Function\n\n\n功能描述:如果 value 不为 null 或 undefined,则返回 value 的值;否则抛出异常\n\n\n参数:无\n\n\n返回值:any as T Optional 中包含这个值\n\n示例:原生 JavaScript var optional = Optional.of(11);\n var result = optional.get(); // 11\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: number = Optional.of(11)\n const result = optional.get() // 11\n }\n});\n\n" + }, + { + "title": "orElse(other: T)", + "url": "/manual/2.2/optional.html#orelseother-t", + "content": "orElse(other: T)\n类型:Function\n\n\n功能描述:如果 value 不为 null 或 undefined,则返回 value 的值;否则返回 other\n\n\n参数:other - any of T 任意类型的值\n\n\n返回值:any as T value 不为 null 或 undefined,则返回 value 的值;否则返回 other\n\n示例:原生 JavaScript var optional = Optional.of(null);\n var result = optional.orElse(\"abc\"); // abc\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: boolean = Optional.of(undefined)\n const result = optional.orElse(false) // false\n }\n});\n\n" + }, + { + "title": "isPresent()", + "url": "/manual/2.2/optional.html#ispresent", + "content": "isPresent()\n类型:Function\n\n\n功能描述:如果 value 不为 null 或 undefined,则返回 true;否则返回 false\n\n\n参数:无\n\n\n返回值:boolean value 不为 null 或 undefined,则返回 true;否则返回 false\n\n示例:原生 JavaScript var optional = Optional.of(null);\n var result = optional.isPresent(); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: number = Optional.of(11)\n const result = optional.isPresent() // true\n }\n});\n\n" + } + ] + }, + { + "title": "Array 参考手册", + "content": "", + "url": "/manual/2.2/array.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.2/array.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nisEmpty\n判断数组是否为空数组\n\n\nexists\n判断元素 item 是否在数组中\n\n\nfirst\n获取数组第一个元素\n\n\nlast\n获取数组最后一个元素\n\n\neach\n按顺序为数组中的每个元素调用一次函数\n\n\nsize\n获取数组大小\n\n\nmerge\n连接两个或多个数组\n\n\ncompact\n返回一个不包含 null/undefined 值元素的数组的新版本\n\n\nunique\n对数组的元素进行去重\n\n\nwithout\n返回不包括参数中任意一个指定值的数组\n\n\nclone\n克隆数组\n\n\nclear\n清空数组\n\n\n" + }, + { + "title": "isEmpty()", + "url": "/manual/2.2/array.html#isempty", + "content": "isEmpty()\n类型:Function\n\n\n功能描述:判断数组是否为空数组\n\n\n参数:无\n\n\n返回值:boolean 数组为空,返回 true;否则返回 false\n\n示例:原生 JavaScript var result = [].isEmpty(); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = ['a', 'b', 'c'].isEmpty() // false\n }\n});\n\n" + }, + { + "title": "exists(item: any)", + "url": "/manual/2.2/array.html#existsitem-any", + "content": "exists(item: any)\n类型:Function\n\n\n功能描述:判断元素 item 是否在数组中\n\n\n参数:item - any 待检测元素\n\n\n返回值:boolean 元素 item 是否在数组中返回 true;否则返回 false\n\n示例:原生 JavaScript var result = ['a', 'b'].exists('a'); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = ['1', '2'].exists(2) // false\n }\n});\n\n" + }, + { + "title": "first()", + "url": "/manual/2.2/array.html#first", + "content": "first()\n类型:Function\n\n\n功能描述:获取数组第一个元素\n\n\n参数:无\n\n\n返回值:any 数组第一个元素\n\n示例:原生 JavaScript var result = ['a', 'b'].first(); // a\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = [1, 2].first() // 1\n }\n});\n\n" + }, + { + "title": "last()", + "url": "/manual/2.2/array.html#last", + "content": "last()\n类型:Function\n\n\n功能描述:获取数组最后一个元素\n\n\n参数:无\n\n\n返回值:any 数组最后一个元素\n\n示例:原生 JavaScript var result = ['a', 'b'].last(); // b\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = [1, 2].last() // 2\n }\n});\n\n" + }, + { + "title": "each(callback: (value: T, index: number, array: readonly T[]) => void, thisArg?: any)", + "url": "/manual/2.2/array.html#eachcallback-value-t,-index-number,-array-readonly-t[]-=>-void,-thisarg?-any", + "content": "each(callback: (value: T, index: number, array: readonly T[]) => void, thisArg?: any)\n类型:Function\n\n\n功能描述:按顺序为数组中的每个元素调用一次函数,forEach的别名\n\n\n参数:callback - (value: T, index: number, array: readonly T[]) => void as Function callback 为数组中的每个元素运行的函数,其中:value 为前元素的值,index 为当前元素的数组索引,array 为当前元素所属的数组对象\nany thisArg 可选。要传递给函数以用作其 \"this\" 值的值,如果此参数为空,则值 \"undefined\" 将作为其 \"this\" 值传递\n\n\n返回值:void\n\n示例:原生 JavaScript ['a', 'b'].each(function (currentValue) {\n console.log(currentValue)\n });\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n ['a', 'b'].each(function (currentValue) {\n console.log(currentValue)\n })\n }\n});\n\n" + }, + { + "title": "size()", + "url": "/manual/2.2/array.html#size", + "content": "size()\n类型:Function\n\n\n功能描述:获取数组大小\n\n\n参数:无\n\n\n返回值:number 数组大小\n\n示例:原生 JavaScript var result = ['a', 'b'].size(); // 2\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: number = [].size() // 0\n }\n});\n\n" + }, + { + "title": "merge(...items: T[])", + "url": "/manual/2.2/array.html#merge...items-t[]", + "content": "merge(...items: T[])\n类型:Function\n\n\n功能描述:连接两个或多个数组\n\n\n参数:items - any as T 待连接的 T 类型的数组\n\n\n返回值:Array 已连接数组的副本\n\n示例:原生 JavaScript var result = [1, 3].merge(2, 4); // [1, 3, 2, 4]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n console result: string[] = ['a', 'b'].merge('c', 'd') // [a, b, c, d]\n }\n});\n\n" + }, + { + "title": "compact()", + "url": "/manual/2.2/array.html#compact", + "content": "compact()\n类型:Function\n\n\n功能描述:返回一个不包含 null/undefined 值元素的数组的新版本\n\n\n参数:无\n\n\n返回值:Array 不包含 null/undefined 值元素的数组的新版本\n\n示例:原生 JavaScript var result = ['a', 'b', null, 'c', 'd'].compact(); // [a, b, c, d]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = ['a', 'b', null, 'c', 'd', undefined].compact() // [a, b, c, d]\n }\n});\n\n" + }, + { + "title": "unique()", + "url": "/manual/2.2/array.html#unique", + "content": "unique()\n类型:Function\n\n\n功能描述:对数组的元素进行去重\n\n\n参数:无\n\n\n返回值:Array 数组元素进行去重后的新版本\n\n示例:原生 JavaScript var result = ['a', 'b', 'c', 'd', 'b', 'd'].unique(); // [a, b, c, d]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = ['a', 'b', 'c', 'c', 'd'].unique() // [a, b, c, d]\n }\n});\n\n" + }, + { + "title": "without(values: T[])", + "url": "/manual/2.2/array.html#withoutvalues-t[]", + "content": "without(values: T[])\n类型:Function\n\n\n功能描述:返回不包括参数中任意一个指定值的数组\n\n\n参数:values - any as T[] 排除值数组\n\n\n返回值:Array 不包括参数中任意一个指定值的数组\n\n示例:原生 JavaScript var result = ['a', 'b', 'c', 'd', 'b', 'd'].without('a', 'b'); // [c, d]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = ['a', 'b', 'c', 'd', 'b', 'd'].without('a', 'b') // [c, d]\n }\n});\n\n" + }, + { + "title": "clone()", + "url": "/manual/2.2/array.html#clone", + "content": "clone()\n类型:Function\n\n\n功能描述:克隆数组\n\n\n参数:无\n\n\n返回值:Array 克隆结果\n\n示例:原生 JavaScript var result = ['a', 'b'].clone(); // [a, b]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = ['a', 'b'].clone() // [a, b]\n }\n});\n\n" + }, + { + "title": "clear()", + "url": "/manual/2.2/array.html#clear", + "content": "clear()\n类型:Function\n\n\n功能描述:清空数组\n\n\n参数:无\n\n\n返回值:Array 空数组\n\n示例:原生 JavaScript var result = ['a', 'b'].clear(); // []\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = ['a', 'b'].clear() // []\n }\n});\n\n" + } + ] + }, + { + "title": "Date 参考手册", + "content": "", + "url": "/manual/2.2/date.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.2/date.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nisLeapYear\n判断是否为闰年\n\n\ngetSeason\n获取季节\n\n\ngetDayOfYear\n获取年份中的第几天\n\n\ngetDaysOfYear\n获取年份总天数\n\n\nformat\n将日期时间格式化为字符串\n\n\n" + }, + { + "title": "isLeapYear()", + "url": "/manual/2.2/date.html#isleapyear", + "content": "isLeapYear()\n类型:Function\n\n\n功能描述:判断是否为闰年\n\n\n参数:无\n\n\n返回值:boolean 是闰年,返回 true;否则返回 false\n\n示例:原生 JavaScript var result = new Date('2000-04-11').isLeapYear(); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new Date('2000-04-11').isLeapYear() // false\n }\n});\n\n" + }, + { + "title": "getSeason()", + "url": "/manual/2.2/date.html#getseason", + "content": "getSeason()\n类型:Function\n\n\n功能描述:获取季节\n\n\n参数:无\n\n\n返回值:number 依次返回 0 至 3 的整数,表示春季、夏季、秋季、冬季\n\n示例:原生 JavaScript var result = new Date('2000-04-11').isLeapYear(); // 0\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new Date('2022-01-11').isLeapYear() // 3\n }\n});\n\n" + }, + { + "title": "getDayOfYear()", + "url": "/manual/2.2/date.html#getdayofyear", + "content": "getDayOfYear()\n类型:Function\n\n\n功能描述:获取年份中的第几天\n\n\n参数:无\n\n\n返回值:number 年份中的第几天\n\n示例:原生 JavaScript var result = new Date('2022-02-11').getDayOfYear(); // 42\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: number = new Date('2022-03-01').getDayOfYear(); // 61\n }\n});\n\n" + }, + { + "title": "getDaysOfYear()", + "url": "/manual/2.2/date.html#getdaysofyear", + "content": "getDaysOfYear()\n类型:Function\n\n\n功能描述:获取年份总天数\n\n\n参数:无\n\n\n返回值:number 年份总天数\n\n示例:原生 JavaScript var result = new Date('2022-02-11').getDaysOfYear(); // 365\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: number = new Date('2020-02-11').getDaysOfYear() // 366\n }\n});\n\n" + }, + { + "title": "format(format: string)", + "url": "/manual/2.2/date.html#formatformat-string", + "content": "format(format: string)\n类型:Function\n\n\n功能描述:将日期时间格式化为字符串\n\n\n参数:format - String format 格式字符串\n y - 年\n\n n - 季度(1 到 4)\n\n N - 季度名称\n\n A - 季度中文名称\n\n M - 月\n\n f - 月(Jan 到 Dec)\n\n F - 月(January 到 December)\n\n C - 月,中文名称\n\n d - 日\n\n Y - 年份中的第几天(0 到 365)\n\n T - 月份有几天(28 到 30)\n\n j - 每月天数后面的英文后缀(st,nd,rd 或者 th)\n\n e - 星期几,数字表示,0(表示星期天)到 6(表示星期六)\n\n E - 星期几,数字表示,1(表示星期一)到 7(表示星期天)\n\n l - 星期几,文本表示,3 个字母(Mon 到 Sun)\n\n L - 星期几,完整的文本格式(Sunday 到 Saturday)\n\n w - 星期几,中文名称\n\n W - 一月中第几个星期几\n\n i - 月份中的第几周\n\n o - 年份中的第几周\n\n h - 小时(1~12)\n\n H - 小时(0~23)\n\n m - 分\n\n s - 秒\n\n S - 毫秒\n\n a - 上午/下午标记\n\n O - 与格林威治时间相差的小时数\n\n P - 与格林威治时间相差的小时数,小时和分钟之间有冒号分隔\n \n Z - 时区\n\n\n\n返回值:string 格式化后的日期时间\n\n示例:原生 JavaScript var result = new Date('2022-01-11').format(\"f-dd,yyyy\"); // Jan-11,2022\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new Date('2022-01-11').format(\"f-dd,yy\"); // Jan-11,22\n }\n});\n\n" + } + ] + }, + { + "title": "Document 参考手册", + "content": "", + "url": "/manual/2.2/document.html", + "children": [ + { + "title": "属性", + "url": "/manual/2.2/document.html#属性", + "content": "属性\n\n属性\n描述\n\n\n\n\nfullScreen\n检测当前文档是否全屏\n\n\nfullScreenEnabled\n检测当前浏览器是否支持全屏模式\n\n\nfullScreenElement\n检测当前文档中正在以全屏模式显示的 Element 节点\n\n\nfullScreen\n检测当前文档是否全屏\n\n\nhttpCookie\nCookie 对象操作\n\n\n" + }, + { + "title": "方法", + "url": "/manual/2.2/document.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nrequestFullscreen\n请求进入全屏模式\n\n\nexitFullscreen\n退出全屏模式\n\n\n" + }, + { + "title": "readonly fullScreen", + "url": "/manual/2.2/document.html#readonly-fullscreen", + "content": "readonly fullScreen\n类型:Property\n\n\n功能描述:检测当前文档是否全屏\n\n\n参数:无\n\n\n返回值:boolean 当前文档是否全屏,返回 true;否则返回 false\n\n示例:原生 JavaScript var result = document.fullScreen;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = document.fullScreen;\n }\n});\n\n" + }, + { + "title": "readonly fullScreenEnabled", + "url": "/manual/2.2/document.html#readonly-fullscreenenabled", + "content": "readonly fullScreenEnabled\n类型:Property\n\n\n功能描述:检测当前浏览器是否支持全屏模式\n\n\n返回值:boolean 当前浏览器是否支持全屏模式返回 true;否则返回 false\n\n示例:原生 JavaScript var result = document.fullScreenEnabled;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = document.fullScreenEnabled\n }\n});\n\n" + }, + { + "title": "readonly fullScreenElement", + "url": "/manual/2.2/document.html#readonly-fullscreenelement", + "content": "readonly fullScreenElement\n类型:Property\n\n\n功能描述:检测当前文档中正在以全屏模式显示的 Element 节点\n\n\n返回值:boolean 当前文档中正在以全屏模式显示的 Element 节点,返回 true;否则返回 false\n\n示例:原生 JavaScript var result = document.fullScreenElement;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = document.fullScreenElement\n }\n});\n\n" + }, + { + "title": "requestFullscreen()", + "url": "/manual/2.2/document.html#requestfullscreen", + "content": "requestFullscreen()\n类型:Function\n\n\n功能描述:请求进入全屏模式\n\n\n参数:无\n\n\n返回值:Promise Promise\n\n示例:原生 JavaScript var result = document.requestFullscreen();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: Promise = document.requestFullscreen()\n }\n});\n\n" + }, + { + "title": "exitFullscreen()", + "url": "/manual/2.2/document.html#exitfullscreen", + "content": "exitFullscreen()\n类型:Function\n\n\n功能描述:退出全屏模式\n\n\n参数:无\n\n\n返回值:Promise Promise\n\n示例:原生 JavaScript var result = document.exitFullscreen();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: Promise = document.exitFullscreen()\n }\n});\n\n" + } + ] + }, + { + "title": "Cookie 参考手册", + "content": "", + "url": "/manual/2.2/cookie.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.2/cookie.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\n[set](cookie.html#setname-string,-value-string-\n-null-\n\n\nget\n获取 Cookie\n\n\ndelete\n删除 Cookie\n\n\n" + }, + { + "title": "set(name: string, value: string | null | undefined, options?: CookieOptions)", + "url": "/manual/2.2/cookie.html#setname-string,-value-string-|-null-|-undefined,-options?-cookieoptions", + "content": "set(name: string, value: string | null | undefined, options?: CookieOptions)\n类型:Function\n\n\n功能描述:设置 Cookie\n\n\n参数:name - string Cookie 名称\n           value - string | null | undefined Cookie 值\n           options - CookieOptions Cookie 选项\n\n\n返回值:string Cookie 字符串\n\n示例:原生 JavaScript var result = document.httpCookie.set(\"name\", \"测试\");\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string | null = document.httpCookie.set(\"name\", \"测试\", {path: '/', domain: '*.test.com'})\n }\n});\n\n" + }, + { + "title": "get(name: string)", + "url": "/manual/2.2/cookie.html#getname-string", + "content": "get(name: string)\n类型:Function\n\n\n功能描述:获取 Cookie 值\n\n\n参数:name - string Cookie 名称\n\n\n返回值:string | null Cookie 值\n\n示例:原生 JavaScript var result = document.httpCookie.get(\"name\")\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string | null = document.httpCookie.get(\"name\")\n }\n});\n\n" + }, + { + "title": "delete(name: string, options?: CookieOptions)", + "url": "/manual/2.2/cookie.html#deletename-string,-options?-cookieoptions", + "content": "delete(name: string, options?: CookieOptions)\n类型:Function\n\n\n功能描述:删除 Cookie\n\n\n参数:name - string Cookie 名称\n           options - CookieOptions Cookie 选项\n\n\n返回值:无\n\n示例:原生 JavaScript var result = document.httpCookie.delete(\"name\");\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n document.httpCookie.delete(\"name\", \"测试\", {domain: '*.test.com'})\n }\n});\n\n" + } + ] + }, + { + "title": "Function 参考手册", + "content": "", + "url": "/manual/2.2/function.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.2/function.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nargumentNames\n获取函数参数名称\n\n\ndelay\n延时执行函数\n\n\n" + }, + { + "title": "argumentNames(...args: any)", + "url": "/manual/2.2/function.html#argumentnames...args-any", + "content": "argumentNames(...args: any)\n类型:Function\n\n\n功能描述:获取函数参数名称\n\n\n参数:args - any 1个或多个任意类型的可变参数可变参数\n\n\n返回值:string[] | null 函数参数名称列表\n\n示例:原生 JavaScript var fn = function(a, b, c){\n\n }\n var result = fn.argumentNames();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const fn = function(a: boolean, b: number, c: String) {\n\n }\n const result: string[] | null = fn.argumentNames()\n }\n});\n\n" + }, + { + "title": "delay(timeout: number)", + "url": "/manual/2.2/function.html#delaytimeout-number", + "content": "delay(timeout: number)\n类型:Function\n\n\n功能描述:延时执行函数\n\n\n参数:timeout - number 延时时间(单位:秒)\n\n\n返回值:any 函数返回值\n\n示例:原生 JavaScript var fn = function(a, b, c){\n return a + b + c;\n }\n var result = fn.delay(3)\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const fn = function(a: boolean, b: number, c: number) {\n return a ? b : c\n }\n const result: any = fn.delay(3)\n }\n});\n\n" + } + ] + }, + { + "title": "Function 参考手册", + "content": "", + "url": "/manual/2.2/math.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.2/math.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nrand\n延时执行函数\n\n\n" + }, + { + "title": "rand(min: number, max?: number)", + "url": "/manual/2.2/math.html#randmin-number,-max?-number", + "content": "rand(min: number, max?: number)\n类型:Function\n\n\n功能描述:产生一个指定范围内的随机数\n\n\n参数:min - number 返回的最低值\n           max - number 返回的最高值\n\n\n返回值:number 随机数\n\n示例:原生 JavaScript var result = Math.rand(1, 5); //\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: number = Math.rand(1, 5)\n }\n});\n\n" + } + ] + }, + { + "title": "Number 参考手册", + "content": "", + "url": "/manual/2.2/number.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.2/number.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\ntoPaddedString\n延时执行函数\n\n\nisOdd\n判断数字是否为奇数\n\n\nisEven\n判断数字是否为偶数\n\n\nisBetween\n判断一个数字是否在另两个数字之间\n\n\n" + }, + { + "title": "toPaddedString(length: number, radix: number)", + "url": "/manual/2.2/number.html#topaddedstringlength-number,-radix-number", + "content": "toPaddedString(length: number, radix: number)\n类型:Function\n\n\n功能描述:数字填充\n\n\n参数:length - number 长度\n           radix - number 进制\n\n\n返回值:string 填充后的字符串数字\n\n示例:原生 JavaScript var result = new Number(5).toPaddedString(12, 2); // 0000000000101\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new Number(5).toPaddedString(12, 8) // 0000000000005\n }\n});\n\n" + }, + { + "title": "isOdd(num: number)", + "url": "/manual/2.2/number.html#isoddnum-number", + "content": "isOdd(num: number)\n类型:Function\n\n\n功能描述:判断数字是否为奇数\n\n\n参数:num - number 需要判断的数字\n\n\n返回值:boolean 数字是为奇数返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Number.isOdd(255); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Number.isOdd(256) // false\n }\n});\n\n" + }, + { + "title": "isEven(num: number)", + "url": "/manual/2.2/number.html#isevennum-number", + "content": "isEven(num: number)\n类型:Function\n\n\n功能描述:判断数字是否为偶数\n\n\n参数:num - number 需要判断的数字\n\n\n返回值:boolean 数字是为偶数返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Number.isEven(255); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Number.isOdd(256) // true\n }\n});\n\n" + }, + { + "title": "isBetween(num: number, min: number, max: number, match?: boolean | undefined)", + "url": "/manual/2.2/number.html#isbetweennum-number,-min-number,-max-number,-match?-boolean-|-undefined", + "content": "isBetween(num: number, min: number, max: number, match?: boolean | undefined)\n类型:Function\n\n\n功能描述:判断一个数字是否在另两个数字之间\n\n\n参数:num - number 需要判断的数字\n           min - number 最小值\n           max - number 最大值\n           match - boolean | undefined 是否包含最小值或最大值\n\n\n返回值:boolean 数字是否在另两个数字之间,返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Number.isBetween(4, 3, 5); // true\n var result = Number.isBetween(4, 4, 5); // false\n var result = Number.isBetween(4, 4, 5, true); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Number.isBetween(4, 3, 5) // true\n const result: boolean = Number.isBetween(4, 4, 5) // false\n const result: boolean = Number.isBetween(4, 4, 5, true) // true\n }\n});\n\n" + } + ] + }, + { + "title": "Object 参考手册", + "content": "", + "url": "/manual/2.2/object.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.2/object.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\ntype\n获取对象数据类型\n\n\nrawType\n获取对象原始数据类型\n\n\nisObject\n判断对象是否为 object 类型\n\n\nisPlainObject\n判断对象是否为简单 object 类型\n\n\nisMap\n判断对象是否为 Map 类型\n\n\nisSet\n判断对象是否为 Set 类型\n\n\nisSymbol\n判断对象是否为 Symbol\n\n\nisPromise\n判断对象是否为 Promise\n\n\nisPrimitive\n判断对象是否为原始类型\n\n\nisFunction\n判断对象是否为函数\n\n\nisArray\n判断对象是否为数组\n\n\nisString\n判断对象是否为字符串对象\n\n\nisNumber\n判断对象是否为数字对象\n\n\nisBoolean\n判断对象是否为布尔对象\n\n\nisRegExp\n判断对象是否为正则对象\n\n\nisFile\n判断对象是否为文件对象\n\n\nisWindow\n判断对象是否为 windows 对象\n\n\nisElement\n判断对象是否为 Element\n\n\nisEvent\n判断对象是否为事件对象\n\n\nisNull\n判断对象是否为 null 对象\n\n\nisUndefined\n判断对象是否为未定义\n\n\nisUndefinedOrNull\n判断对象是否为未定义或 null\n\n\nequals\n深度判断两个对象是否相等\n\n\nclone\n克隆对象\n\n\nomit\n克隆对象,但支持删除指定属性\n\n\n" + }, + { + "title": "type(obj: any)", + "url": "/manual/2.2/object.html#typeobj-any", + "content": "type(obj: any)\n类型:Function\n\n\n功能描述:获取对象数据类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:string 对象数据类型\n\n示例:原生 JavaScript var result = Object.type(true); // boolean\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = Object.type(4.4) // number\n }\n});\n\n" + }, + { + "title": "rawType(obj: any)", + "url": "/manual/2.2/object.html#rawtypeobj-any", + "content": "rawType(obj: any)\n类型:Function\n\n\n功能描述:获取对象原始数据类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:string 原始数据类型\n\n示例:原生 JavaScript var result = Object.type(\"4.4\"); // String\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = Object.type(4.4) // Number\n }\n});\n\n" + }, + { + "title": "isObject(obj: any)", + "url": "/manual/2.2/object.html#isobjectobj-any", + "content": "isObject(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 object 类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为 object 类型返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isObject(\"1\"); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isObject(new String(\"1\")) // true\n }\n});\n\n" + }, + { + "title": "isPlainObject(obj: any)", + "url": "/manual/2.2/object.html#isplainobjectobj-any", + "content": "isPlainObject(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为简单 object 类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为简单 object 类型返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isPlainObject(new String(\"1\")); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isPlainObject({\"a\":\"A\"}) // true\n }\n});\n\n" + }, + { + "title": "isMap(obj: any)", + "url": "/manual/2.2/object.html#ismapobj-any", + "content": "isMap(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 Map 类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为 Map 类型返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isMap(new Map()); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isMap({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isSet(obj: any)", + "url": "/manual/2.2/object.html#issetobj-any", + "content": "isSet(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 Map 类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为 Set 类型返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isSet(new Set()); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isSet({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isSymbol(obj: any)", + "url": "/manual/2.2/object.html#issymbolobj-any", + "content": "isSymbol(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 Symbol\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为 Symbol 返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isSymbol(Symbol('a')); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isSymbol({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isPromise(obj: any)", + "url": "/manual/2.2/object.html#ispromiseobj-any", + "content": "isPromise(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 Promise\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为 Promise 返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isPromise(new Promise(function(){})); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isPromise({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isPrimitive(obj: any)", + "url": "/manual/2.2/object.html#isprimitiveobj-any", + "content": "isPrimitive(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为原始类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为原始类型返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isPrimitive(11); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isPromise({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isFunction(obj: any)", + "url": "/manual/2.2/object.html#isfunctionobj-any", + "content": "isFunction(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为函数\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为函数返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isFunction(location.href); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isFunction(\"a\".replace) // true\n }\n});\n\n" + }, + { + "title": "isArray(obj: any)", + "url": "/manual/2.2/object.html#isarrayobj-any", + "content": "isArray(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为数组\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为数组返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isArray([1, 2]); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isArray({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isString(obj: any)", + "url": "/manual/2.2/object.html#isstringobj-any", + "content": "isString(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为字符串对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为字符串返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isString(1); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isString(\"1\") // true\n }\n});\n\n" + }, + { + "title": "isNumber(obj: any)", + "url": "/manual/2.2/object.html#isnumberobj-any", + "content": "isNumber(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为数字对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为数字对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isNumber(1.0); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isNumber(\"1.0\") // false\n }\n});\n\n" + }, + { + "title": "isBoolean(obj: any)", + "url": "/manual/2.2/object.html#isbooleanobj-any", + "content": "isBoolean(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为布尔对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为布尔对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isBoolean(false); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isBoolean(1) // false\n }\n});\n\n" + }, + { + "title": "isRegExp(obj: any)", + "url": "/manual/2.2/object.html#isregexpobj-any", + "content": "isRegExp(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为正则对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为正则对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isRegExp(/^[a-z]$/); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isRegExp('/^[a-z]$/') // false\n }\n});\n\n" + }, + { + "title": "isFile(obj: any)", + "url": "/manual/2.2/object.html#isfileobj-any", + "content": "isFile(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为文件对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为文件对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isFile(new File(['text1', 'text2'], 'test.txt', {type: 'text/plain'})); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = bject.isFile(document) // false\n }\n});\n\n" + }, + { + "title": "isWindow(obj: any)", + "url": "/manual/2.2/object.html#iswindowobj-any", + "content": "isWindow(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 windows 对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为 windows 对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isWindow(window); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isWindow(document) // false\n }\n});\n\n" + }, + { + "title": "isElement(obj: any)", + "url": "/manual/2.2/object.html#iselementobj-any", + "content": "isElement(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 Element\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为 Element 返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isElement(document); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isElement(document.body) // false\n }\n});\n\n" + }, + { + "title": "isEvent(obj: any)", + "url": "/manual/2.2/object.html#iseventobj-any", + "content": "isEvent(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为事件对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为事件对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isEvent(document.onclick); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isEvent(document.onclick) // false\n }\n});\n\n" + }, + { + "title": "isNull(obj: any)", + "url": "/manual/2.2/object.html#isnullobj-any", + "content": "isNull(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 null\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为 null 返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isNull(null); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isNull(\"A\") // false\n }\n});\n\n" + }, + { + "title": "isUndefined(obj: any)", + "url": "/manual/2.2/object.html#isundefinedobj-any", + "content": "isUndefined(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为未定义\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为未定义返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isUndefined(a); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isUndefined(b) // true\n }\n});\n\n" + }, + { + "title": "isUndefinedOrNull(obj: any)", + "url": "/manual/2.2/object.html#isundefinedornullobj-any", + "content": "isUndefinedOrNull(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为未定义或 null\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为未定义或 null 返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isUndefinedOrNull(a); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isUndefinedOrNull(document.body) // false\n }\n});\n\n" + }, + { + "title": "equals(obj1: any, obj2: any)", + "url": "/manual/2.2/object.html#equalsobj1-any,-obj2-any", + "content": "equals(obj1: any, obj2: any)\n类型:Function\n\n\n功能描述:深度判断两个对象是否相等\n\n\n参数:obj1 - any 一个对象\n           obj2 - any 用于和 obj1 比较的对象\n\n\n返回值:boolean 当两个对象相等时,返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = Object.equals(\"a\", \"A\"); // false\n var result = Object.equals(\"a\", \"a\"); // true\n var result = Object.equals(1, 1.0); // true\n var result = Object.equals([1], [1.0]); // true\n var result = Object.equals([1], [1.0, 1.1]); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.equals(\"a\", \"A\") // false\n const result: boolean = Object.equals(\"a\", \"a\") // true\n const result: boolean = Object.equals(1, 1.0) // true\n const result: boolean = Object.equals([1], [1.0]) // true\n const result: boolean = Object.equals([1], [1.0, 1.1]) // false\n }\n});\n\n" + }, + { + "title": "clone(obj: any)", + "url": "/manual/2.2/object.html#cloneobj-any", + "content": "clone(obj: any)\n类型:Function\n\n\n功能描述:克隆对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:any 新对象实例\n\n示例:原生 JavaScript var result = Object.clone({\"a\": \"A\"}); // {\"a\": \"A\"}\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: any = Object.clone({\"a\":\"A\"}) // {\"a\": \"A\"}\n }\n});\n\n" + }, + { + "title": "omit(obj: T, ...fields: K[])", + "url": "/manual/2.2/object.html#omitobj-t,-...fields-k[]", + "content": "omit(obj: T, ...fields: K[])\n类型:Function\n\n\n功能描述:克隆对象,但支持删除指定属性\n\n\n参数:obj - object 任意对象\n           fields - K[] 需要删除的属性\n\n\n返回值:any 新对象实例\n\n示例:原生 JavaScript var source = {\n id: 1,\n name: 'buession',\n year: 2023\n };\n var result = Object.omit(source, \"id\", \"year\"); // {\"name\": \"buession\"}\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const source = {\n id: 1,\n name: 'buession',\n year: 2023\n };\n const result = Object.omit(source, \"id\", \"year\") // {\"name\": \"buession\"}\n }\n});\n\n" + } + ] + }, + { + "title": "String 参考手册", + "content": "", + "url": "/manual/2.2/string.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.2/string.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nexists\n判断字符串是否存在\n\n\nequals\n判断字符串是否相等\n\n\nequalsIgnoreCase\n判断字符串是否相等,不考虑大小写\n\n\nisEmpty\n判断是否为空字符串\n\n\nisNotEmpty\n判断是否不为空字符串\n\n\nisBlank\n判断是否为空白字符串\n\n\nrepeat\n重复一个字符串\n\n\nleft\n截取字符串左边边指定数目的字符串\n\n\nright\n截取字符串右边指定数目的字符串\n\n\ntruncation\n截取字符串,超出部分用 truncation 替代\n\n\nltrim\n删除字符串开头的空白字符\n\n\nrtrim\n删除字符串结尾的空白字符\n\n\nstartsWith\n判断字符串是否以给定的字符串开头\n\n\nendsWith\n判断字符串是否以给定的字符串结尾\n\n\nlcfirst\n首字母小写\n\n\nucfirst\n首字母大写\n\n\nescapeHTML\n将 HTML 编码\n\n\nunescapeHTML\n将 HTML 实体字符解码\n\n\nstripTag\n删除 HTML 标签\n\n\nstripTags\n批量删除 HTML 标签\n\n\nstripScripts\n删除 script 标签\n\n\ntoArray\n将字符串转换为数组\n\n\ninspect\n返回一个数组的字符串表示形式\n\n\nhashCode\n获取字符串 hash code\n\n\nrandom\n生成随机字符串\n\n\n" + }, + { + "title": "exists(str: string)", + "url": "/manual/2.2/string.html#existsstr-string", + "content": "exists(str: string)\n类型:Function\n\n\n功能描述:判断字符串是否存在\n\n\n参数:str - string 子字符串\n\n\n返回值:boolean 子字符串存在返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \"ABC\".exists(\"A\"); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = \"ABC\".exists(\"a\") // false\n }\n});\n\n" + }, + { + "title": "equals(str: string | undefined | null)", + "url": "/manual/2.2/string.html#equalsstr-string-|-undefined-|-null", + "content": "equals(str: string | undefined | null)\n类型:Function\n\n\n功能描述:判断字符串是否相等\n\n\n参数:str - string | undefined | null 与此 String 进行比较的对象\n\n\n返回值:boolean 字符串相等返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \"A\".equals(new String(\"A\")); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = \"A\".equals(\"a\") // false\n }\n});\n\n" + }, + { + "title": "equalsIgnoreCase(str: string | undefined | null)", + "url": "/manual/2.2/string.html#equalsignorecasestr-string-|-undefined-|-null", + "content": "equalsIgnoreCase(str: string | undefined | null)\n类型:Function\n\n\n功能描述:判断字符串是否相等,不考虑大小写\n\n\n参数:str - string | undefined | null 与此 String 进行比较的对象\n\n\n返回值:boolean 字符串相等返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \"A\".equalsIgnoreCase(\"a\"); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"a\").equalsIgnoreCase(\"1\") // false\n }\n});\n\n" + }, + { + "title": "isEmpty()", + "url": "/manual/2.2/string.html#isempty", + "content": "isEmpty()\n类型:Function\n\n\n功能描述:判断是否为空字符串\n\n\n参数:无\n\n\n返回值:boolean 字符串为空,即长度为 0 返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \" \".isEmpty(); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"\").isEmpty() // true\n }\n});\n\n" + }, + { + "title": "isNotEmpty()", + "url": "/manual/2.2/string.html#isnotempty", + "content": "isNotEmpty()\n类型:Function\n\n\n功能描述:判断是否不为空字符串\n\n\n参数:无\n\n\n返回值:boolean 字符串不为空,即长度大于 0 返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \" \".isNotEmpty(); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"\").isNotEmpty() // false\n }\n});\n\n" + }, + { + "title": "isBlank()", + "url": "/manual/2.2/string.html#isblank", + "content": "isBlank()\n类型:Function\n\n\n功能描述:判断是否为空白字符串\n\n\n参数:无\n\n\n返回值:boolean 字符串全为空白字符串(即:空格、回车、Tag 制表位、非打印字符)返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \" \".isBlank(); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"\\t\\n\").isBlank() // true\n }\n});\n\n" + }, + { + "title": "repeat(count: number)", + "url": "/manual/2.2/string.html#repeatcount-number", + "content": "repeat(count: number)\n类型:Function\n\n\n功能描述:重复一个字符串\n\n\n参数:count - number 重复次数\n\n\n返回值:string 重复后的字符串\n\n示例:原生 JavaScript var result = \"A\".repeat(3); // AAA\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"Abc\".repeat(3) // AbcAbcAbc\n }\n});\n\n" + }, + { + "title": "left(length: number)", + "url": "/manual/2.2/string.html#leftlength-number", + "content": "left(length: number)\n类型:Function\n\n\n功能描述:截取字符串左边边指定数目的字符串\n\n\n参数:length - number 截取长度\n\n\n返回值:string 子字符串,length 如果为负数,则返回空字符串\n\n示例:原生 JavaScript var result = \"Abc\".left(1); // A\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"Abc\".left(-1) // \"\"\n }\n});\n\n" + }, + { + "title": "right(length: number)", + "url": "/manual/2.2/string.html#rightlength-number", + "content": "right(length: number)\n类型:Function\n\n\n功能描述:截截取字符串右边指定数目的字符串\n\n\n参数:length - number 截取长度\n\n\n返回值:string 子字符串,length 如果为负数,则返回空字符串\n\n示例:原生 JavaScript var result = \"Abc\".right(1); // c\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"Abc\".right(-1) // \"\"\n }\n});\n\n" + }, + { + "title": "truncation(length: number, truncation: string)", + "url": "/manual/2.2/string.html#truncationlength-number,-truncation-string", + "content": "truncation(length: number, truncation: string)\n类型:Function\n\n\n功能描述:截取字符串,超出部分用 truncation 替代\n\n\n参数:length - number 截取长度\n\n             truncation - string 替换字符串返回值:string 截取后的字符串;实际截取长度:当 length 小于等于 truncation 的长度时为,length;当 length 大于 truncation 的长度时为,length - truncation.length\n示例:原生 JavaScript var result = \"Abc\".truncation(1, \"...\"); // A...\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"Abc\".truncation(6, \"...\") // Abc\n }\n});\n\n" + }, + { + "title": "ltrim()", + "url": "/manual/2.2/string.html#ltrim", + "content": "ltrim()\n类型:Function\n\n\n功能描述:删除字符串开头的空白字符(包括:空格、制表位、换行以及其它非打印字符)\n\n\n参数:无\n\n\n返回值:string 删除了字符串最左边的空白字符的字符串\n\n示例:原生 JavaScript var result = \" Abc\".ltrim(); // \"Abc\"\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new String(\" Abc \").ltrim() // \"Abc \"\n }\n});\n\n" + }, + { + "title": "rtrim()", + "url": "/manual/2.2/string.html#rtrim", + "content": "rtrim()\n类型:Function\n\n\n功能描述:删除字符串结尾的空白字符(包括:空格、制表位、换行以及其它非打印字符)\n\n\n参数:无\n\n\n返回值:string 删除了字符串最右边的空白字符的字符串\n\n示例:原生 JavaScript var result = \" Abc\".rtrim(); // \" Abc\"\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new String(\" Abc \").rtrim() // \" Abc\"\n }\n});\n\n" + }, + { + "title": "startsWith(str: string)", + "url": "/manual/2.2/string.html#startswithstr-string", + "content": "startsWith(str: string)\n类型:Function\n\n\n功能描述:判断字符串是否以给定的字符串开头\n\n\n参数:str - string 搜索的字符串\n\n\n返回值:boolean 字符串是否以给定的字符串开头返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \"Abc\".startsWith(\"a\"); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"aBc\").startsWith(\"a\") // true\n }\n});\n\n" + }, + { + "title": "endsWith(str: string)", + "url": "/manual/2.2/string.html#endswithstr-string", + "content": "endsWith(str: string)\n类型:Function\n\n\n功能描述:判断字符串是否以给定的字符串结尾\n\n\n参数:str - string 搜索的字符串\n\n\n返回值:boolean 字符串是否以给定的字符串结尾返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \"Abc\".endsWith(\"C\"); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"aBc\").endsWith(\"c\") // true\n }\n});\n\n" + }, + { + "title": "lcfirst()", + "url": "/manual/2.2/string.html#lcfirst", + "content": "lcfirst()\n类型:Function\n\n\n功能描述:首字母小写\n\n\n参数:无\n\n\n返回值:string 首字母小写后的字符串\n\n示例:原生 JavaScript var result = \"Abc\".lcfirst(); // \"abc\"\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new String(\"abc\").lcfirst() // \"abc\"\n }\n});\n\n" + }, + { + "title": "ucfirst()", + "url": "/manual/2.2/string.html#ucfirst", + "content": "ucfirst()\n类型:Function\n\n\n功能描述:首字母大写\n\n\n参数:无\n\n\n返回值:string 首字母大写后的字符串\n\n示例:原生 JavaScript var result = \"abc\".ucfirst(); // \"Abc\"\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new String(\"abc\").lcfirst() // \"Abc\"\n }\n});\n\n" + }, + { + "title": "escapeHTML()", + "url": "/manual/2.2/string.html#escapehtml", + "content": "escapeHTML()\n类型:Function\n\n\n功能描述:将 HTML 编码,参考:https://www.w3school.com.cn/html/html_entities.asp\n\n\n参数:无\n\n\n返回值:string 编码后的字符串\n\n示例:原生 JavaScript var result = \"test\".escapeHTML(); // <a href='https://www.domain.com'>test</a>\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new String(\"test\").lcfirst() // <a href='https://www.domain.com'>test</a>\n }\n});\n\n" + }, + { + "title": "unescapeHTML()", + "url": "/manual/2.2/string.html#unescapehtml", + "content": "unescapeHTML()\n类型:Function\n\n\n功能描述:将 HTML 实体字符解码,参考:https://www.w3school.com.cn/html/html_entities.asp\n\n\n参数:无\n\n\n返回值:string 解码后的字符串\n\n示例:原生 JavaScript var result = \"<a href='https://www.domain.com'>test</a>\".unescapeHTML(); // test\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"<a href='https://www.domain.com'>test</a>\".unescapeHTML() // test\n }\n});\n\n" + }, + { + "title": "stripTag(tag: string)", + "url": "/manual/2.2/string.html#striptagtag-string", + "content": "stripTag(tag: string)\n类型:Function\n\n\n功能描述:删除 HTML 标签\n\n\n参数:tag - string 待删除标签\n\n\n返回值:string 删除标签后的字符串\n\n示例:原生 JavaScript var result = \"test\".stripTag(\"a\"); // test\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"test\".stripTag(\"a\") // test\n }\n});\n\n" + }, + { + "title": "stripTags(tag: string)", + "url": "/manual/2.2/string.html#striptagstag-string", + "content": "stripTags(tag: string)\n类型:Function\n\n\n功能描述:批量删除 HTML 标签\n\n\n参数:tag - string[] | string 删除指定的标签\n\n\n返回值:string 删除标签后的字符串\n\n示例:原生 JavaScript var result = \"testEM\".stripTags([\"a\", \"i\"]); // testEM\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"testEM\".stripTags([\"a\", \"i\"]) // testEM\n }\n});\n\n" + }, + { + "title": "stripScripts()", + "url": "/manual/2.2/string.html#stripscripts", + "content": "stripScripts()\n类型:Function\n\n\n功能描述:删除 script 标签\n\n\n参数:无\n\n\n返回值:string 删除 script 标签后的字符串\n\n示例:原生 JavaScript var result = 'alert(\"test\");test'.stripScripts(); // test\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = 'alert(\"test\");test'.stripScripts() // \n" + }, + { + "title": "toArray(delimiter: string)", + "url": "/manual/2.2/string.html#toarraydelimiter-string", + "content": "toArray(delimiter: string)\n类型:Function\n\n\n功能描述:将字符串转换为数组\n\n\n参数:delimiter - string 分隔字符\n\n\n返回值:string[] 字符串数组\n\n示例:原生 JavaScript var result = \"a|b|c\".toArray('|'); // [ \"a\", \"b\", \"c\" ]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = \"a|b||c\".toArray('||') // [ \"a|b\", \"c\" ]\n }\n});\n\n" + }, + { + "title": "inspect(useDoubleQuotes: boolean)", + "url": "/manual/2.2/string.html#inspectusedoublequotes-boolean", + "content": "inspect(useDoubleQuotes: boolean)\n类型:Function\n\n\n功能描述:返回一个数组的字符串表示形式\n\n\n参数:useDoubleQuotes - boolean 是否使用双引号引住\n\n\n返回值:string 数组的字符串表示形式\n\n示例:原生 JavaScript var result = \"a|b|c\".inspect(true); // \\\"a|b|c\\\"\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"a|b|c\".inspect(false) // 'a|b|c'\n }\n});\n\n" + }, + { + "title": "hashCode()", + "url": "/manual/2.2/string.html#hashcode", + "content": "hashCode()\n类型:Function\n\n\n功能描述:获取字符串 hash code\n\n\n参数:无\n\n\n返回值:number 字符串的 hash code\n\n示例:原生 JavaScript var result = \"abc\".hashCode(); // 96354\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: number = \"abcABC\".hashCode() // 2870546592\n }\n});\n\n" + }, + { + "title": "random(length: number, type?: RandomType = \"NUMERIC\" | \"LETTER\" | \"LETTER_NUMERIC\" | \"CHINESE\" | undefined)", + "url": "/manual/2.2/string.html#randomlength-number,-type?-randomtype-=-\"numeric\"-|-\"letter\"-|-\"letter_numeric\"-|-\"chinese\"-|-undefined", + "content": "random(length: number, type?: RandomType = \"NUMERIC\" | \"LETTER\" | \"LETTER_NUMERIC\" | \"CHINESE\" | undefined)\n类型:Function\n\n\n功能描述:生成随机字符串\n\n\n参数:length - number 生成字符串的长度\n\n             type - NUMERIC | LETTER | LETTER_NUMERIC | CHINESE | undefined 生成类型,可选参数,当未指定时为 LETTER_NUMERIC NUMERIC - 数字随机字符串\n LETTER - 英文随机字符串\n\n LETTER_NUMERIC - 英文数字混合随机字符串\n\n CHINESE - 中文随机字符串\n返回值:string 随机字符串\n示例:原生 JavaScript var result = String.random(6); // 1Diim2\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = String.random(6, \"NUMERIC\") // 881773\n }\n});\n\n" + } + ] + }, + { + "title": "Window 参考手册", + "content": "", + "url": "/manual/2.2/window.html", + "children": [ + { + "title": "属性", + "url": "/manual/2.2/window.html#属性", + "content": "属性\n\n属性\n描述\n\n\n\n\nbrowser\n浏览器信息对象\n\n\nlocation\nLocation 对象\n\n\n" + }, + { + "title": "方法", + "url": "/manual/2.2/window.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\ncopy\n将字符串复制到剪贴板\n\n\n" + }, + { + "title": "copy(str: string)", + "url": "/manual/2.2/window.html#copystr-string", + "content": "copy(str: string)\n类型:Function\n\n\n功能描述:将字符串复制到剪贴板\n\n\n参数:str - string 字符串\n\n\n返回值:无\n\n示例:原生 JavaScript window.copy(\"这是要复制的字符串\");\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n window.copy(\"这是要复制的字符串\")\n }\n});\n\n" + }, + { + "title": "Browser", + "url": "/manual/2.2/window.html#browser", + "content": "Browser" + }, + { + "title": "Location", + "url": "/manual/2.2/window.html#location", + "content": "Location" + } + ] + }, + { + "title": "HttpCookie 参考手册", + "content": "", + "url": "/manual/2.2/browser.html", + "children": [ + { + "title": "属性", + "url": "/manual/2.2/browser.html#属性", + "content": "属性\n\n属性\n描述\n\n\n\n\nuserAgent\n获取浏览器 User-Agent\n\n\nname\n获取浏览器应用程序名称\n\n\nisMobile\n是否为移动设备\n\n\nisChrome\n是否为 Chrome 浏览器\n\n\nisFirefox\n是否为 Firefox 浏览器\n\n\nisMozilla\n是否为 Mozilla 浏览器\n\n\nisMSIE\n是否为 IE 浏览器\n\n\nisOpera\n是否为 Opera 浏览器\n\n\nisSafari\n是否为 Safari 浏览器\n\n\nisNetscape\n是否为 Netscape 浏览器\n\n\n" + }, + { + "title": "readonly userAgent", + "url": "/manual/2.2/browser.html#readonly-useragent", + "content": "readonly userAgent\n类型:Property\n\n\n功能描述:获取浏览器 User-Agent,等价于 navigator.userAgent\n\n\n返回值:string 浏览器 User-Agent\n\n示例:原生 JavaScript var result = window.browser.userAgent; // Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: String = window.browser.userAgent // Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0\n }\n});\n\n" + }, + { + "title": "readonly name", + "url": "/manual/2.2/browser.html#readonly-name", + "content": "readonly name\n类型:Property\n\n\n功能描述:获取浏览器应用程序名称,等价于 navigator.appName\n\n\n返回值:string 浏览器应用程序名称\n\n示例:原生 JavaScript var result = window.browser.name; // Netscape\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: String = window.browser.name // Netscape\n }\n});\n\n" + }, + { + "title": "readonly isMobile", + "url": "/manual/2.2/browser.html#readonly-ismobile", + "content": "readonly isMobile\n类型:Property\n\n\n功能描述:是否为移动设备,检测依据:User-Agent 中含有 Android、iPhone、iPod、Windows Phone、Mobile、Coolpad、mmp、SmartPhone、midp、wap、xoom、Symbian、J2ME、Blackberry、Wince 其中任意一个字符串\n\n\n返回值:boolean 是移动设备返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isMobile\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isMobile\n }\n});\n\n" + }, + { + "title": "readonly isChrome", + "url": "/manual/2.2/browser.html#readonly-ischrome", + "content": "readonly isChrome\n类型:Property\n\n\n功能描述:是否为 Chrome 浏览器\n\n\n返回值:boolean 是 Chrome 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isChrome;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isChrome\n }\n});\n\n" + }, + { + "title": "readonly isFirefox", + "url": "/manual/2.2/browser.html#readonly-isfirefox", + "content": "readonly isFirefox\n类型:Property\n\n\n功能描述:是否为 Firefox 浏览器\n\n\n返回值:boolean 是 Firefox 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isFirefox;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isFirefox\n }\n});\n\n" + }, + { + "title": "readonly isMSIE", + "url": "/manual/2.2/browser.html#readonly-ismsie", + "content": "readonly isMSIE\n类型:Property\n\n\n功能描述:是否为 IE 浏览器\n\n\n返回值:boolean 是 IE 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isMSIE;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isMSIE\n }\n});\n\n" + }, + { + "title": "readonly isOpera", + "url": "/manual/2.2/browser.html#readonly-isopera", + "content": "readonly isOpera\n类型:Property\n\n\n功能描述:是否为 Opera 浏览器\n\n\n返回值:boolean 是 Opera 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isOpera;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isOpera\n }\n});\n\n" + }, + { + "title": "readonly isSafari", + "url": "/manual/2.2/browser.html#readonly-issafari", + "content": "readonly isSafari\n类型:Property\n\n\n功能描述:是否为 Safari 浏览器\n\n\n返回值:boolean 是 Safari 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isSafari;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isSafari\n }\n});\n\n" + }, + { + "title": "readonly isNetscape", + "url": "/manual/2.2/browser.html#readonly-isnetscape", + "content": "readonly isNetscape\n类型:Property\n\n\n功能描述:是否为 Netscape 浏览器\n\n\n返回值:boolean 是 Netscape 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isNetscape;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isNetscape\n }\n});\n\n" + } + ] + }, + { + "title": "Location 参考手册", + "content": "", + "url": "/manual/2.2/location.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.2/location.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\ngetParameters\n获取所有的请求参数及值\n\n\ngetParameter\n获取指定请求参数的值\n\n\n" + }, + { + "title": "getParameters()", + "url": "/manual/2.2/location.html#getparameters", + "content": "getParameters()\n类型:Function\n\n\n功能描述:获取所有的请求参数及值\n\n\n参数:无\n\n\n返回值:Record 当前请求 URL 中的所有的请求参数及值\n\n示例:原生 JavaScript var result = location.getParameters();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: Record = location.getParameters()\n }\n});\n\n" + }, + { + "title": "getParameter(name: string)", + "url": "/manual/2.2/location.html#getparametername-string", + "content": "getParameter(name: string)\n类型:Function\n\n\n功能描述:获取指定请求参数的值\n\n\n参数:string 参数名称\n\n\n返回值:any 请求参数的值\n\n示例:原生 JavaScript var result = location.getParameter(\"action\");\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: any = location.getParameter('action');\n }\n});\n\n" + } + ] + }, + { + "title": "API", + "content": "Buession Prototype API 包含以下目录:PrototypeTryOptionalArrayDateDocumentFunctionMathNumberObjectStringWindow", + "url": "/manual/2.1/index.html", + "children": [] + }, + { + "title": "Prototype 参考手册", + "content": "", + "url": "/manual/2.1/prototype.html", + "children": [ + { + "title": "属性", + "url": "/manual/2.1/prototype.html#属性", + "content": "属性\n\n属性\n描述\n\n\n\n\nversion\n获取 Buession Prototype 版本\n\n\n" + }, + { + "title": "方法", + "url": "/manual/2.1/prototype.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nemptyFunction\n执行一个空方法\n\n\nK\n返回参数传递的任意值\n\n\n" + }, + { + "title": "version", + "url": "/manual/2.1/prototype.html#version", + "content": "version\n类型:String\n\n\n功能描述:获取 Buession Prototype 版本\n\n\n返回值:Buession Prototype 版本\n\n示例:原生 JavaScript var ver = Prototype.version;\n\nvue \n Prototype 版本:{Prototype.version}\n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n }\n});\n\n" + }, + { + "title": "emptyFunction()", + "url": "/manual/2.1/prototype.html#emptyfunction", + "content": "emptyFunction()\n类型:Function\n\n\n功能描述:执行一个空方法\n\n\n参数:无\n\n\n返回值:void\n\n示例:原生 JavaScript Prototype.emptyFunction();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n Prototype.emptyFunction()\n }\n});\n\n" + }, + { + "title": "K(x: any)", + "url": "/manual/2.1/prototype.html#kx-any", + "content": "K(x: any)\n类型:Function\n\n\n功能描述:返回参数传递的任意值\n\n\n参数:x - any 任意值\n\n\n返回值:any 参数传递的任意值\n\n示例:原生 JavaScript var v = Prototype.K(object);\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const v: any = Prototype.K(object)\n }\n});\n\n" + } + ] + }, + { + "title": "Try 参考手册", + "content": "", + "url": "/manual/2.1/try.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.1/try.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nthese\n接收任意数目的函数作为参数,返回第一个执行成功的函数(未抛出异常的函数)的结果\n\n\n" + }, + { + "title": "these(args: any[])", + "url": "/manual/2.1/try.html#theseargs-any[]", + "content": "these(args: any[])\n类型:Function\n\n\n功能描述:接收任意数目的函数作为参数,返回第一个执行成功的函数(未抛出异常的函数)的结果\n\n\n参数:args any[] 一个或多个 function 作为参数\n\n\n返回值:any 任意函数参数执行结果\n\n示例:原生 JavaScript var result = Try.these(function(){\n\n },\n\n function() {\n\n });\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result:any = Try.these(function(){\n\n },\n\n function() {\n\n })\n }\n});\n\n" + } + ] + }, + { + "title": "Optional 参考手册", + "content": "Optional 类是一个可以为 null 或 undefined 的容器对象,如果值 value 存在则 isPresent() 方法会返回 true,调用 get() 方法会返回 value 的值。其设计思想,参考 java8 的 Optional使用方式,在构造函数中传入任意类型值;Optional 提供很多有用的方法,这样我们就不用显式进行 null 值和 undefined 的检测。", + "url": "/manual/2.1/optional.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.1/optional.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nof\n返回一个指定 T 类型的值的 Optional 实例\n\n\nofNullable\n如果为非 null 或 undefined,返回 Optional 描述的指定值的实例,否则返回空的 Optional 实例\n\n\nempty\n返回空的 Optional 实例\n\n\nget\n如果 value 不为 null 或 undefined,则返回 value 的值;否则抛出异常\n\n\norElse\n如果 value 不为 null 或 undefined,则返回 value 的值;否则返回 other\n\n\nisPresent\n如果 value 不为 null 或 undefined,则返回 true;否则返回 false\n\n\n var optional = new Optional(any value);\n\n" + }, + { + "title": "static of(value: T)", + "url": "/manual/2.1/optional.html#static-ofvalue-t", + "content": "static of(value: T)\n类型:Function\n\n\n功能描述:返回一个指定 T 类型的值的 Optional 实例\n\n\n参数:value - any of T 任意类型的值\n\n\n返回值:Object T 类型的值的 Optional 实例\n\n示例:原生 JavaScript Optional.of(11);\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: boolean = Optional.of(false)\n }\n});\n\n" + }, + { + "title": "static ofNullable(value: T)", + "url": "/manual/2.1/optional.html#static-ofnullablevalue-t", + "content": "static ofNullable(value: T)\n类型:Function\n\n\n功能描述:如果为非 null 或 undefined,返回 Optional 描述的指定值的实例,否则返回空的 Optional 实例\n\n\n参数:value - any as T 任意类型的值\n\n\n返回值:Object T 类型的值的 Optional 实例,或空的 Optional 实例\n\n示例:原生 JavaScript Optional.ofNullable('js');\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: number = Optional.ofNullable(11)\n }\n});\n\n" + }, + { + "title": "static empty()", + "url": "/manual/2.1/optional.html#static-empty", + "content": "static empty()\n类型:Function\n\n\n功能描述:返回空的 Optional 实例\n\n\n参数:无\n\n\n返回值:Object as Optional 空的 Optional 实例\n\n示例:原生 JavaScript Optional.empty();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: null Optional.empty()\n }\n});\n\n" + }, + { + "title": "get()", + "url": "/manual/2.1/optional.html#get", + "content": "get()\n类型:Function\n\n\n功能描述:如果 value 不为 null 或 undefined,则返回 value 的值;否则抛出异常\n\n\n参数:无\n\n\n返回值:any as T Optional 中包含这个值\n\n示例:原生 JavaScript var optional = Optional.of(11);\n var result = optional.get(); // 11\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: number = Optional.of(11)\n const result = optional.get() // 11\n }\n});\n\n" + }, + { + "title": "orElse(other: T)", + "url": "/manual/2.1/optional.html#orelseother-t", + "content": "orElse(other: T)\n类型:Function\n\n\n功能描述:如果 value 不为 null 或 undefined,则返回 value 的值;否则返回 other\n\n\n参数:other - any of T 任意类型的值\n\n\n返回值:any as T value 不为 null 或 undefined,则返回 value 的值;否则返回 other\n\n示例:原生 JavaScript var optional = Optional.of(null);\n var result = optional.orElse(\"abc\"); // abc\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: boolean = Optional.of(undefined)\n const result = optional.orElse(false) // false\n }\n});\n\n" + }, + { + "title": "isPresent()", + "url": "/manual/2.1/optional.html#ispresent", + "content": "isPresent()\n类型:Function\n\n\n功能描述:如果 value 不为 null 或 undefined,则返回 true;否则返回 false\n\n\n参数:无\n\n\n返回值:boolean value 不为 null 或 undefined,则返回 true;否则返回 false\n\n示例:原生 JavaScript var optional = Optional.of(null);\n var result = optional.isPresent(); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: number = Optional.of(11)\n const result = optional.isPresent() // true\n }\n});\n\n" + } + ] + }, + { + "title": "Array 参考手册", + "content": "", + "url": "/manual/2.1/array.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.1/array.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nisEmpty\n判断数组是否为空数组\n\n\nexists\n判断元素 item 是否在数组中\n\n\nfirst\n获取数组第一个元素\n\n\nlast\n获取数组最后一个元素\n\n\neach\n按顺序为数组中的每个元素调用一次函数\n\n\nsize\n获取数组大小\n\n\nmerge\n连接两个或多个数组\n\n\ncompact\n返回一个不包含 null/undefined 值元素的数组的新版本\n\n\nunique\n对数组的元素进行去重\n\n\nwithout\n返回不包括参数中任意一个指定值的数组\n\n\nclone\n克隆数组\n\n\nclear\n清空数组\n\n\n" + }, + { + "title": "isEmpty()", + "url": "/manual/2.1/array.html#isempty", + "content": "isEmpty()\n类型:Function\n\n\n功能描述:判断数组是否为空数组\n\n\n参数:无\n\n\n返回值:boolean 数组为空,返回 true;否则返回 false\n\n示例:原生 JavaScript var result = [].isEmpty(); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = ['a', 'b', 'c'].isEmpty() // false\n }\n});\n\n" + }, + { + "title": "exists(item: any)", + "url": "/manual/2.1/array.html#existsitem-any", + "content": "exists(item: any)\n类型:Function\n\n\n功能描述:判断元素 item 是否在数组中\n\n\n参数:item - any 待检测元素\n\n\n返回值:boolean 元素 item 是否在数组中返回 true;否则返回 false\n\n示例:原生 JavaScript var result = ['a', 'b'].exists('a'); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = ['1', '2'].exists(2) // false\n }\n});\n\n" + }, + { + "title": "first()", + "url": "/manual/2.1/array.html#first", + "content": "first()\n类型:Function\n\n\n功能描述:获取数组第一个元素\n\n\n参数:无\n\n\n返回值:any 数组第一个元素\n\n示例:原生 JavaScript var result = ['a', 'b'].first(); // a\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = [1, 2].first() // 1\n }\n});\n\n" + }, + { + "title": "last()", + "url": "/manual/2.1/array.html#last", + "content": "last()\n类型:Function\n\n\n功能描述:获取数组最后一个元素\n\n\n参数:无\n\n\n返回值:any 数组最后一个元素\n\n示例:原生 JavaScript var result = ['a', 'b'].last(); // b\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = [1, 2].last() // 2\n }\n});\n\n" + }, + { + "title": "each(callback: (value: T, index: number, array: readonly T[]) => void, thisArg?: any)", + "url": "/manual/2.1/array.html#eachcallback-value-t,-index-number,-array-readonly-t[]-=>-void,-thisarg?-any", + "content": "each(callback: (value: T, index: number, array: readonly T[]) => void, thisArg?: any)\n类型:Function\n\n\n功能描述:按顺序为数组中的每个元素调用一次函数,forEach的别名\n\n\n参数:callback - (value: T, index: number, array: readonly T[]) => void as Function callback 为数组中的每个元素运行的函数,其中:value 为前元素的值,index 为当前元素的数组索引,array 为当前元素所属的数组对象\nany thisArg 可选。要传递给函数以用作其 \"this\" 值的值,如果此参数为空,则值 \"undefined\" 将作为其 \"this\" 值传递\n\n\n返回值:void\n\n示例:原生 JavaScript ['a', 'b'].each(function (currentValue) {\n console.log(currentValue)\n });\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n ['a', 'b'].each(function (currentValue) {\n console.log(currentValue)\n })\n }\n});\n\n" + }, + { + "title": "size()", + "url": "/manual/2.1/array.html#size", + "content": "size()\n类型:Function\n\n\n功能描述:获取数组大小\n\n\n参数:无\n\n\n返回值:number 数组大小\n\n示例:原生 JavaScript var result = ['a', 'b'].size(); // 2\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: number = [].size() // 0\n }\n});\n\n" + }, + { + "title": "merge(...items: T[])", + "url": "/manual/2.1/array.html#merge...items-t[]", + "content": "merge(...items: T[])\n类型:Function\n\n\n功能描述:连接两个或多个数组\n\n\n参数:items - any as T 待连接的 T 类型的数组\n\n\n返回值:Array 已连接数组的副本\n\n示例:原生 JavaScript var result = [1, 3].merge(2, 4); // [1, 3, 2, 4]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n console result: string[] = ['a', 'b'].merge('c', 'd') // [a, b, c, d]\n }\n});\n\n" + }, + { + "title": "compact()", + "url": "/manual/2.1/array.html#compact", + "content": "compact()\n类型:Function\n\n\n功能描述:返回一个不包含 null/undefined 值元素的数组的新版本\n\n\n参数:无\n\n\n返回值:Array 不包含 null/undefined 值元素的数组的新版本\n\n示例:原生 JavaScript var result = ['a', 'b', null, 'c', 'd'].compact(); // [a, b, c, d]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = ['a', 'b', null, 'c', 'd', undefined].compact() // [a, b, c, d]\n }\n});\n\n" + }, + { + "title": "unique()", + "url": "/manual/2.1/array.html#unique", + "content": "unique()\n类型:Function\n\n\n功能描述:对数组的元素进行去重\n\n\n参数:无\n\n\n返回值:Array 数组元素进行去重后的新版本\n\n示例:原生 JavaScript var result = ['a', 'b', 'c', 'd', 'b', 'd'].unique(); // [a, b, c, d]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = ['a', 'b', 'c', 'c', 'd'].unique() // [a, b, c, d]\n }\n});\n\n" + }, + { + "title": "without(values: T[])", + "url": "/manual/2.1/array.html#withoutvalues-t[]", + "content": "without(values: T[])\n类型:Function\n\n\n功能描述:返回不包括参数中任意一个指定值的数组\n\n\n参数:values - any as T[] 排除值数组\n\n\n返回值:Array 不包括参数中任意一个指定值的数组\n\n示例:原生 JavaScript var result = ['a', 'b', 'c', 'd', 'b', 'd'].without('a', 'b'); // [c, d]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = ['a', 'b', 'c', 'd', 'b', 'd'].without('a', 'b') // [c, d]\n }\n});\n\n" + }, + { + "title": "clone()", + "url": "/manual/2.1/array.html#clone", + "content": "clone()\n类型:Function\n\n\n功能描述:克隆数组\n\n\n参数:无\n\n\n返回值:Array 克隆结果\n\n示例:原生 JavaScript var result = ['a', 'b'].clone(); // [a, b]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = ['a', 'b'].clone() // [a, b]\n }\n});\n\n" + }, + { + "title": "clear()", + "url": "/manual/2.1/array.html#clear", + "content": "clear()\n类型:Function\n\n\n功能描述:清空数组\n\n\n参数:无\n\n\n返回值:Array 空数组\n\n示例:原生 JavaScript var result = ['a', 'b'].clear(); // []\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = ['a', 'b'].clear() // []\n }\n});\n\n" + } + ] + }, + { + "title": "Date 参考手册", + "content": "", + "url": "/manual/2.1/date.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.1/date.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nisLeapYear\n判断是否为闰年\n\n\ngetSeason\n获取季节\n\n\ngetDayOfYear\n获取年份中的第几天\n\n\ngetDaysOfYear\n获取年份总天数\n\n\nformat\n将日期时间格式化为字符串\n\n\n" + }, + { + "title": "isLeapYear()", + "url": "/manual/2.1/date.html#isleapyear", + "content": "isLeapYear()\n类型:Function\n\n\n功能描述:判断是否为闰年\n\n\n参数:无\n\n\n返回值:boolean 是闰年,返回 true;否则返回 false\n\n示例:原生 JavaScript var result = new Date('2000-04-11').isLeapYear(); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new Date('2000-04-11').isLeapYear() // false\n }\n});\n\n" + }, + { + "title": "getSeason()", + "url": "/manual/2.1/date.html#getseason", + "content": "getSeason()\n类型:Function\n\n\n功能描述:获取季节\n\n\n参数:无\n\n\n返回值:number 依次返回 0 至 3 的整数,表示春季、夏季、秋季、冬季\n\n示例:原生 JavaScript var result = new Date('2000-04-11').isLeapYear(); // 0\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new Date('2022-01-11').isLeapYear() // 3\n }\n});\n\n" + }, + { + "title": "getDayOfYear()", + "url": "/manual/2.1/date.html#getdayofyear", + "content": "getDayOfYear()\n类型:Function\n\n\n功能描述:获取年份中的第几天\n\n\n参数:无\n\n\n返回值:number 年份中的第几天\n\n示例:原生 JavaScript var result = new Date('2022-02-11').getDayOfYear(); // 42\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: number = new Date('2022-03-01').getDayOfYear(); // 61\n }\n});\n\n" + }, + { + "title": "getDaysOfYear()", + "url": "/manual/2.1/date.html#getdaysofyear", + "content": "getDaysOfYear()\n类型:Function\n\n\n功能描述:获取年份总天数\n\n\n参数:无\n\n\n返回值:number 年份总天数\n\n示例:原生 JavaScript var result = new Date('2022-02-11').getDaysOfYear(); // 365\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: number = new Date('2020-02-11').getDaysOfYear() // 366\n }\n});\n\n" + }, + { + "title": "format(format: string)", + "url": "/manual/2.1/date.html#formatformat-string", + "content": "format(format: string)\n类型:Function\n\n\n功能描述:将日期时间格式化为字符串\n\n\n参数:format - String format 格式字符串\n y - 年\n\n n - 季度(1 到 4)\n\n N - 季度名称\n\n A - 季度中文名称\n\n M - 月\n\n f - 月(Jan 到 Dec)\n\n F - 月(January 到 December)\n\n C - 月,中文名称\n\n d - 日\n\n Y - 年份中的第几天(0 到 365)\n\n T - 月份有几天(28 到 30)\n\n j - 每月天数后面的英文后缀(st,nd,rd 或者 th)\n\n e - 星期几,数字表示,0(表示星期天)到 6(表示星期六)\n\n E - 星期几,数字表示,1(表示星期一)到 7(表示星期天)\n\n l - 星期几,文本表示,3 个字母(Mon 到 Sun)\n\n L - 星期几,完整的文本格式(Sunday 到 Saturday)\n\n w - 星期几,中文名称\n\n W - 一月中第几个星期几\n\n i - 月份中的第几周\n\n o - 年份中的第几周\n\n h - 小时(1~12)\n\n H - 小时(0~23)\n\n m - 分\n\n s - 秒\n\n S - 毫秒\n\n a - 上午/下午标记\n\n O - 与格林威治时间相差的小时数\n\n P - 与格林威治时间相差的小时数,小时和分钟之间有冒号分隔\n \n Z - 时区\n\n\n\n返回值:string 格式化后的日期时间\n\n示例:原生 JavaScript var result = new Date('2022-01-11').format(\"f-dd,yyyy\"); // Jan-11,2022\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new Date('2022-01-11').format(\"f-dd,yy\"); // Jan-11,22\n }\n});\n\n" + } + ] + }, + { + "title": "Document 参考手册", + "content": "", + "url": "/manual/2.1/document.html", + "children": [ + { + "title": "属性", + "url": "/manual/2.1/document.html#属性", + "content": "属性\n\n属性\n描述\n\n\n\n\nfullScreen\n检测当前文档是否全屏\n\n\nfullScreenEnabled\n检测当前浏览器是否支持全屏模式\n\n\nfullScreenElement\n检测当前文档中正在以全屏模式显示的 Element 节点\n\n\nfullScreen\n检测当前文档是否全屏\n\n\nhttpCookie\nCookie 对象操作\n\n\n" + }, + { + "title": "方法", + "url": "/manual/2.1/document.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nrequestFullscreen\n请求进入全屏模式\n\n\nexitFullscreen\n退出全屏模式\n\n\n" + }, + { + "title": "readonly fullScreen", + "url": "/manual/2.1/document.html#readonly-fullscreen", + "content": "readonly fullScreen\n类型:Property\n\n\n功能描述:检测当前文档是否全屏\n\n\n参数:无\n\n\n返回值:boolean 当前文档是否全屏,返回 true;否则返回 false\n\n示例:原生 JavaScript var result = document.fullScreen;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = document.fullScreen;\n }\n});\n\n" + }, + { + "title": "readonly fullScreenEnabled", + "url": "/manual/2.1/document.html#readonly-fullscreenenabled", + "content": "readonly fullScreenEnabled\n类型:Property\n\n\n功能描述:检测当前浏览器是否支持全屏模式\n\n\n返回值:boolean 当前浏览器是否支持全屏模式返回 true;否则返回 false\n\n示例:原生 JavaScript var result = document.fullScreenEnabled;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = document.fullScreenEnabled\n }\n});\n\n" + }, + { + "title": "readonly fullScreenElement", + "url": "/manual/2.1/document.html#readonly-fullscreenelement", + "content": "readonly fullScreenElement\n类型:Property\n\n\n功能描述:检测当前文档中正在以全屏模式显示的 Element 节点\n\n\n返回值:boolean 当前文档中正在以全屏模式显示的 Element 节点,返回 true;否则返回 false\n\n示例:原生 JavaScript var result = document.fullScreenElement;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = document.fullScreenElement\n }\n});\n\n" + }, + { + "title": "requestFullscreen()", + "url": "/manual/2.1/document.html#requestfullscreen", + "content": "requestFullscreen()\n类型:Function\n\n\n功能描述:请求进入全屏模式\n\n\n参数:无\n\n\n返回值:Promise Promise\n\n示例:原生 JavaScript var result = document.requestFullscreen();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: Promise = document.requestFullscreen()\n }\n});\n\n" + }, + { + "title": "exitFullscreen()", + "url": "/manual/2.1/document.html#exitfullscreen", + "content": "exitFullscreen()\n类型:Function\n\n\n功能描述:退出全屏模式\n\n\n参数:无\n\n\n返回值:Promise Promise\n\n示例:原生 JavaScript var result = document.exitFullscreen();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: Promise = document.exitFullscreen()\n }\n});\n\n" + } + ] + }, + { + "title": "Cookie 参考手册", + "content": "", + "url": "/manual/2.1/cookie.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.1/cookie.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\n[set](cookie.html#setname-string,-value-string-\n-null-\n\n\nget\n获取 Cookie\n\n\ndelete\n删除 Cookie\n\n\n" + }, + { + "title": "set(name: string, value: string | null | undefined, options?: CookieOptions)", + "url": "/manual/2.1/cookie.html#setname-string,-value-string-|-null-|-undefined,-options?-cookieoptions", + "content": "set(name: string, value: string | null | undefined, options?: CookieOptions)\n类型:Function\n\n\n功能描述:设置 Cookie\n\n\n参数:name - string Cookie 名称\n           value - string | null | undefined Cookie 值\n           options - CookieOptions Cookie 选项\n\n\n返回值:string Cookie 字符串\n\n示例:原生 JavaScript var result = document.httpCookie.set(\"name\", \"测试\");\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string | null = document.httpCookie.set(\"name\", \"测试\", {path: '/', domain: '*.test.com'})\n }\n});\n\n" + }, + { + "title": "get(name: string)", + "url": "/manual/2.1/cookie.html#getname-string", + "content": "get(name: string)\n类型:Function\n\n\n功能描述:获取 Cookie 值\n\n\n参数:name - string Cookie 名称\n\n\n返回值:string | null Cookie 值\n\n示例:原生 JavaScript var result = document.httpCookie.get(\"name\")\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string | null = document.httpCookie.get(\"name\")\n }\n});\n\n" + }, + { + "title": "delete(name: string, options?: CookieOptions)", + "url": "/manual/2.1/cookie.html#deletename-string,-options?-cookieoptions", + "content": "delete(name: string, options?: CookieOptions)\n类型:Function\n\n\n功能描述:删除 Cookie\n\n\n参数:name - string Cookie 名称\n           options - CookieOptions Cookie 选项\n\n\n返回值:无\n\n示例:原生 JavaScript var result = document.httpCookie.delete(\"name\");\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n document.httpCookie.delete(\"name\", \"测试\", {domain: '*.test.com'})\n }\n});\n\n" + } + ] + }, + { + "title": "Function 参考手册", + "content": "", + "url": "/manual/2.1/function.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.1/function.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nargumentNames\n获取函数参数名称\n\n\ndelay\n延时执行函数\n\n\n" + }, + { + "title": "argumentNames(...args: any)", + "url": "/manual/2.1/function.html#argumentnames...args-any", + "content": "argumentNames(...args: any)\n类型:Function\n\n\n功能描述:获取函数参数名称\n\n\n参数:args - any 1个或多个任意类型的可变参数可变参数\n\n\n返回值:string[] | null 函数参数名称列表\n\n示例:原生 JavaScript var fn = function(a, b, c){\n\n }\n var result = fn.argumentNames();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const fn = function(a: boolean, b: number, c: String) {\n\n }\n const result: string[] | null = fn.argumentNames()\n }\n});\n\n" + }, + { + "title": "delay(timeout: number)", + "url": "/manual/2.1/function.html#delaytimeout-number", + "content": "delay(timeout: number)\n类型:Function\n\n\n功能描述:延时执行函数\n\n\n参数:timeout - number 延时时间(单位:秒)\n\n\n返回值:any 函数返回值\n\n示例:原生 JavaScript var fn = function(a, b, c){\n return a + b + c;\n }\n var result = fn.delay(3)\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const fn = function(a: boolean, b: number, c: number) {\n return a ? b : c\n }\n const result: any = fn.delay(3)\n }\n});\n\n" + } + ] + }, + { + "title": "Function 参考手册", + "content": "", + "url": "/manual/2.1/math.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.1/math.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nrand\n延时执行函数\n\n\n" + }, + { + "title": "rand(min: number, max?: number)", + "url": "/manual/2.1/math.html#randmin-number,-max?-number", + "content": "rand(min: number, max?: number)\n类型:Function\n\n\n功能描述:产生一个指定范围内的随机数\n\n\n参数:min - number 返回的最低值\n           max - number 返回的最高值\n\n\n返回值:number 随机数\n\n示例:原生 JavaScript var result = Math.rand(1, 5); //\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: number = Math.rand(1, 5)\n }\n});\n\n" + } + ] + }, + { + "title": "Number 参考手册", + "content": "", + "url": "/manual/2.1/number.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.1/number.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\ntoPaddedString\n延时执行函数\n\n\nisOdd\n判断数字是否为奇数\n\n\nisEven\n判断数字是否为偶数\n\n\nisBetween\n判断一个数字是否在另两个数字之间\n\n\n" + }, + { + "title": "toPaddedString(length: number, radix: number)", + "url": "/manual/2.1/number.html#topaddedstringlength-number,-radix-number", + "content": "toPaddedString(length: number, radix: number)\n类型:Function\n\n\n功能描述:数字填充\n\n\n参数:length - number 长度\n           radix - number 进制\n\n\n返回值:string 填充后的字符串数字\n\n示例:原生 JavaScript var result = new Number(5).toPaddedString(12, 2); // 0000000000101\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new Number(5).toPaddedString(12, 8) // 0000000000005\n }\n});\n\n" + }, + { + "title": "isOdd(num: number)", + "url": "/manual/2.1/number.html#isoddnum-number", + "content": "isOdd(num: number)\n类型:Function\n\n\n功能描述:判断数字是否为奇数\n\n\n参数:num - number 需要判断的数字\n\n\n返回值:boolean 数字是为奇数返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Number.isOdd(255); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Number.isOdd(256) // false\n }\n});\n\n" + }, + { + "title": "isEven(num: number)", + "url": "/manual/2.1/number.html#isevennum-number", + "content": "isEven(num: number)\n类型:Function\n\n\n功能描述:判断数字是否为偶数\n\n\n参数:num - number 需要判断的数字\n\n\n返回值:boolean 数字是为偶数返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Number.isEven(255); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Number.isOdd(256) // true\n }\n});\n\n" + }, + { + "title": "isBetween(num: number, min: number, max: number, match?: boolean | undefined)", + "url": "/manual/2.1/number.html#isbetweennum-number,-min-number,-max-number,-match?-boolean-|-undefined", + "content": "isBetween(num: number, min: number, max: number, match?: boolean | undefined)\n类型:Function\n\n\n功能描述:判断一个数字是否在另两个数字之间\n\n\n参数:num - number 需要判断的数字\n           min - number 最小值\n           max - number 最大值\n           match - boolean | undefined 是否包含最小值或最大值\n\n\n返回值:boolean 数字是否在另两个数字之间,返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Number.isBetween(4, 3, 5); // true\n var result = Number.isBetween(4, 4, 5); // false\n var result = Number.isBetween(4, 4, 5, true); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Number.isBetween(4, 3, 5) // true\n const result: boolean = Number.isBetween(4, 4, 5) // false\n const result: boolean = Number.isBetween(4, 4, 5, true) // true\n }\n});\n\n" + } + ] + }, + { + "title": "Object 参考手册", + "content": "", + "url": "/manual/2.1/object.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.1/object.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\ntype\n获取对象数据类型\n\n\nrawType\n获取对象原始数据类型\n\n\nisObject\n判断对象是否为 object 类型\n\n\nisPlainObject\n判断对象是否为简单 object 类型\n\n\nisMap\n判断对象是否为 Map 类型\n\n\nisSet\n判断对象是否为 Set 类型\n\n\nisSymbol\n判断对象是否为 Symbol\n\n\nisPromise\n判断对象是否为 Promise\n\n\nisPrimitive\n判断对象是否为原始类型\n\n\nisFunction\n判断对象是否为函数\n\n\nisArray\n判断对象是否为数组\n\n\nisString\n判断对象是否为字符串对象\n\n\nisNumber\n判断对象是否为数字对象\n\n\nisBoolean\n判断对象是否为布尔对象\n\n\nisRegExp\n判断对象是否为正则对象\n\n\nisFile\n判断对象是否为文件对象\n\n\nisWindow\n判断对象是否为 windows 对象\n\n\nisElement\n判断对象是否为 Element\n\n\nisEvent\n判断对象是否为事件对象\n\n\nisNull\n判断对象是否为 null 对象\n\n\nisUndefined\n判断对象是否为未定义\n\n\nisUndefinedOrNull\n判断对象是否为未定义或 null\n\n\nclone\n克隆对象\n\n\n" + }, + { + "title": "type(obj: any)", + "url": "/manual/2.1/object.html#typeobj-any", + "content": "type(obj: any)\n类型:Function\n\n\n功能描述:获取对象数据类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:string 对象数据类型\n\n示例:原生 JavaScript var result = Object.type(true); // boolean\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = Object.type(4.4) // number\n }\n});\n\n" + }, + { + "title": "rawType(obj: any)", + "url": "/manual/2.1/object.html#rawtypeobj-any", + "content": "rawType(obj: any)\n类型:Function\n\n\n功能描述:获取对象原始数据类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:string 原始数据类型\n\n示例:原生 JavaScript var result = Object.type(\"4.4\"); // String\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = Object.type(4.4) // Number\n }\n});\n\n" + }, + { + "title": "isObject(obj: any)", + "url": "/manual/2.1/object.html#isobjectobj-any", + "content": "isObject(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 object 类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为 object 类型返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isObject(\"1\"); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isObject(new String(\"1\")) // true\n }\n});\n\n" + }, + { + "title": "isPlainObject(obj: any)", + "url": "/manual/2.1/object.html#isplainobjectobj-any", + "content": "isPlainObject(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为简单 object 类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为简单 object 类型返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isPlainObject(new String(\"1\")); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isPlainObject({\"a\":\"A\"}) // true\n }\n});\n\n" + }, + { + "title": "isMap(obj: any)", + "url": "/manual/2.1/object.html#ismapobj-any", + "content": "isMap(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 Map 类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为 Map 类型返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isMap(new Map()); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isMap({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isSet(obj: any)", + "url": "/manual/2.1/object.html#issetobj-any", + "content": "isSet(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 Map 类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为 Set 类型返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isSet(new Set()); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isSet({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isSymbol(obj: any)", + "url": "/manual/2.1/object.html#issymbolobj-any", + "content": "isSymbol(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 Symbol\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为 Symbol 返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isSymbol(Symbol('a')); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isSymbol({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isPromise(obj: any)", + "url": "/manual/2.1/object.html#ispromiseobj-any", + "content": "isPromise(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 Promise\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为 Promise 返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isPromise(new Promise(function(){})); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isPromise({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isPrimitive(obj: any)", + "url": "/manual/2.1/object.html#isprimitiveobj-any", + "content": "isPrimitive(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为原始类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为原始类型返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isPrimitive(11); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isPromise({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isFunction(obj: any)", + "url": "/manual/2.1/object.html#isfunctionobj-any", + "content": "isFunction(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为函数\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为函数返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isFunction(location.href); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isFunction(\"a\".replace) // true\n }\n});\n\n" + }, + { + "title": "isArray(obj: any)", + "url": "/manual/2.1/object.html#isarrayobj-any", + "content": "isArray(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为数组\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为数组返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isArray([1, 2]); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isArray({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isString(obj: any)", + "url": "/manual/2.1/object.html#isstringobj-any", + "content": "isString(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为字符串对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为字符串返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isString(1); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isString(\"1\") // true\n }\n});\n\n" + }, + { + "title": "isNumber(obj: any)", + "url": "/manual/2.1/object.html#isnumberobj-any", + "content": "isNumber(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为数字对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为数字对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isNumber(1.0); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isNumber(\"1.0\") // false\n }\n});\n\n" + }, + { + "title": "isBoolean(obj: any)", + "url": "/manual/2.1/object.html#isbooleanobj-any", + "content": "isBoolean(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为布尔对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为布尔对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isBoolean(false); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isBoolean(1) // false\n }\n});\n\n" + }, + { + "title": "isRegExp(obj: any)", + "url": "/manual/2.1/object.html#isregexpobj-any", + "content": "isRegExp(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为正则对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为正则对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isRegExp(/^[a-z]$/); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isRegExp('/^[a-z]$/') // false\n }\n});\n\n" + }, + { + "title": "isFile(obj: any)", + "url": "/manual/2.1/object.html#isfileobj-any", + "content": "isFile(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为文件对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为文件对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isFile(new File(['text1', 'text2'], 'test.txt', {type: 'text/plain'})); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = bject.isFile(document) // false\n }\n});\n\n" + }, + { + "title": "isWindow(obj: any)", + "url": "/manual/2.1/object.html#iswindowobj-any", + "content": "isWindow(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 windows 对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为 windows 对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isWindow(window); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isWindow(document) // false\n }\n});\n\n" + }, + { + "title": "isElement(obj: any)", + "url": "/manual/2.1/object.html#iselementobj-any", + "content": "isElement(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 Element\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为 Element 返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isElement(document); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isElement(document.body) // false\n }\n});\n\n" + }, + { + "title": "isEvent(obj: any)", + "url": "/manual/2.1/object.html#iseventobj-any", + "content": "isEvent(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为事件对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为事件对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isEvent(document.onclick); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isEvent(document.onclick) // false\n }\n});\n\n" + }, + { + "title": "isNull(obj: any)", + "url": "/manual/2.1/object.html#isnullobj-any", + "content": "isNull(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 null\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为 null 返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isNull(null); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isNull(\"A\") // false\n }\n});\n\n" + }, + { + "title": "isUndefined(obj: any)", + "url": "/manual/2.1/object.html#isundefinedobj-any", + "content": "isUndefined(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为未定义\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为未定义返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isUndefined(a); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isUndefined(b) // true\n }\n});\n\n" + }, + { + "title": "isUndefinedOrNull(obj: any)", + "url": "/manual/2.1/object.html#isundefinedornullobj-any", + "content": "isUndefinedOrNull(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为未定义或 null\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为未定义或 null 返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isUndefinedOrNull(a); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isUndefinedOrNull(document.body) // false\n }\n});\n\n" + }, + { + "title": "clone(obj: any)", + "url": "/manual/2.1/object.html#cloneobj-any", + "content": "clone(obj: any)\n类型:Function\n\n\n功能描述:克隆对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:any 新对象实例\n\n示例:原生 JavaScript var result = Object.clone({\"a\": \"A\"}); // {\"a\": \"A\"}\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: any = Object.clone({\"a\":\"A\"}) // {\"a\": \"A\"}\n }\n});\n\n" + } + ] + }, + { + "title": "String 参考手册", + "content": "", + "url": "/manual/2.1/string.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.1/string.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nexists\n判断字符串是否存在\n\n\nequals\n判断字符串是否相等\n\n\nequalsIgnoreCase\n判断字符串是否相等,不考虑大小写\n\n\nisEmpty\n判断是否为空字符串\n\n\nisNotEmpty\n判断是否不为空字符串\n\n\nisBlank\n判断是否为空白字符串\n\n\nrepeat\n重复一个字符串\n\n\nleft\n截取字符串左边边指定数目的字符串\n\n\nright\n截取字符串右边指定数目的字符串\n\n\ntruncation\n截取字符串,超出部分用 truncation 替代\n\n\nltrim\n删除字符串开头的空白字符\n\n\nrtrim\n删除字符串结尾的空白字符\n\n\nstartsWith\n判断字符串是否以给定的字符串开头\n\n\nendsWith\n判断字符串是否以给定的字符串结尾\n\n\nlcfirst\n首字母小写\n\n\nucfirst\n首字母大写\n\n\nescapeHTML\n将 HTML 编码\n\n\nunescapeHTML\n将 HTML 实体字符解码\n\n\nstripTag\n删除 HTML 标签\n\n\nstripTags\n批量删除 HTML 标签\n\n\nstripScripts\n删除 script 标签\n\n\ntoArray\n将字符串转换为数组\n\n\ninspect\n返回一个数组的字符串表示形式\n\n\nhashCode\n获取字符串 hash code\n\n\nrandom\n生成随机字符串\n\n\n" + }, + { + "title": "exists(str: string)", + "url": "/manual/2.1/string.html#existsstr-string", + "content": "exists(str: string)\n类型:Function\n\n\n功能描述:判断字符串是否存在\n\n\n参数:str - string 子字符串\n\n\n返回值:boolean 子字符串存在返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \"ABC\".exists(\"A\"); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = \"ABC\".exists(\"a\") // false\n }\n});\n\n" + }, + { + "title": "equals(str: string | undefined | null)", + "url": "/manual/2.1/string.html#equalsstr-string-|-undefined-|-null", + "content": "equals(str: string | undefined | null)\n类型:Function\n\n\n功能描述:判断字符串是否相等\n\n\n参数:str - string | undefined | null 与此 String 进行比较的对象\n\n\n返回值:boolean 字符串相等返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \"A\".equals(new String(\"A\")); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = \"A\".equals(\"a\") // false\n }\n});\n\n" + }, + { + "title": "equalsIgnoreCase(str: string | undefined | null)", + "url": "/manual/2.1/string.html#equalsignorecasestr-string-|-undefined-|-null", + "content": "equalsIgnoreCase(str: string | undefined | null)\n类型:Function\n\n\n功能描述:判断字符串是否相等,不考虑大小写\n\n\n参数:str - string | undefined | null 与此 String 进行比较的对象\n\n\n返回值:boolean 字符串相等返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \"A\".equalsIgnoreCase(\"a\"); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"a\").equalsIgnoreCase(\"1\") // false\n }\n});\n\n" + }, + { + "title": "isEmpty()", + "url": "/manual/2.1/string.html#isempty", + "content": "isEmpty()\n类型:Function\n\n\n功能描述:判断是否为空字符串\n\n\n参数:无\n\n\n返回值:boolean 字符串为空,即长度为 0 返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \" \".isEmpty(); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"\").isEmpty() // true\n }\n});\n\n" + }, + { + "title": "isNotEmpty()", + "url": "/manual/2.1/string.html#isnotempty", + "content": "isNotEmpty()\n类型:Function\n\n\n功能描述:判断是否不为空字符串\n\n\n参数:无\n\n\n返回值:boolean 字符串不为空,即长度大于 0 返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \" \".isNotEmpty(); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"\").isNotEmpty() // false\n }\n});\n\n" + }, + { + "title": "isBlank()", + "url": "/manual/2.1/string.html#isblank", + "content": "isBlank()\n类型:Function\n\n\n功能描述:判断是否为空白字符串\n\n\n参数:无\n\n\n返回值:boolean 字符串全为空白字符串(即:空格、回车、Tag 制表位、非打印字符)返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \" \".isBlank(); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"\\t\\n\").isBlank() // true\n }\n});\n\n" + }, + { + "title": "repeat(count: number)", + "url": "/manual/2.1/string.html#repeatcount-number", + "content": "repeat(count: number)\n类型:Function\n\n\n功能描述:重复一个字符串\n\n\n参数:count - number 重复次数\n\n\n返回值:string 重复后的字符串\n\n示例:原生 JavaScript var result = \"A\".repeat(3); // AAA\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"Abc\".repeat(3) // AbcAbcAbc\n }\n});\n\n" + }, + { + "title": "left(length: number)", + "url": "/manual/2.1/string.html#leftlength-number", + "content": "left(length: number)\n类型:Function\n\n\n功能描述:截取字符串左边边指定数目的字符串\n\n\n参数:length - number 截取长度\n\n\n返回值:string 子字符串,length 如果为负数,则返回空字符串\n\n示例:原生 JavaScript var result = \"Abc\".left(1); // A\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"Abc\".left(-1) // \"\"\n }\n});\n\n" + }, + { + "title": "right(length: number)", + "url": "/manual/2.1/string.html#rightlength-number", + "content": "right(length: number)\n类型:Function\n\n\n功能描述:截截取字符串右边指定数目的字符串\n\n\n参数:length - number 截取长度\n\n\n返回值:string 子字符串,length 如果为负数,则返回空字符串\n\n示例:原生 JavaScript var result = \"Abc\".right(1); // c\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"Abc\".right(-1) // \"\"\n }\n});\n\n" + }, + { + "title": "truncation(length: number, truncation: string)", + "url": "/manual/2.1/string.html#truncationlength-number,-truncation-string", + "content": "truncation(length: number, truncation: string)\n类型:Function\n\n\n功能描述:截取字符串,超出部分用 truncation 替代\n\n\n参数:length - number 截取长度\n\n             truncation - string 替换字符串返回值:string 截取后的字符串;实际截取长度:当 length 小于等于 truncation 的长度时为,length;当 length 大于 truncation 的长度时为,length - truncation.length\n示例:原生 JavaScript var result = \"Abc\".truncation(1, \"...\"); // A...\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"Abc\".truncation(6, \"...\") // Abc\n }\n});\n\n" + }, + { + "title": "ltrim()", + "url": "/manual/2.1/string.html#ltrim", + "content": "ltrim()\n类型:Function\n\n\n功能描述:删除字符串开头的空白字符(包括:空格、制表位、换行以及其它非打印字符)\n\n\n参数:无\n\n\n返回值:string 删除了字符串最左边的空白字符的字符串\n\n示例:原生 JavaScript var result = \" Abc\".ltrim(); // \"Abc\"\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new String(\" Abc \").ltrim() // \"Abc \"\n }\n});\n\n" + }, + { + "title": "rtrim()", + "url": "/manual/2.1/string.html#rtrim", + "content": "rtrim()\n类型:Function\n\n\n功能描述:删除字符串结尾的空白字符(包括:空格、制表位、换行以及其它非打印字符)\n\n\n参数:无\n\n\n返回值:string 删除了字符串最右边的空白字符的字符串\n\n示例:原生 JavaScript var result = \" Abc\".rtrim(); // \" Abc\"\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new String(\" Abc \").rtrim() // \" Abc\"\n }\n});\n\n" + }, + { + "title": "startsWith(str: string)", + "url": "/manual/2.1/string.html#startswithstr-string", + "content": "startsWith(str: string)\n类型:Function\n\n\n功能描述:判断字符串是否以给定的字符串开头\n\n\n参数:str - string 搜索的字符串\n\n\n返回值:boolean 字符串是否以给定的字符串开头返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \"Abc\".startsWith(\"a\"); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"aBc\").startsWith(\"a\") // true\n }\n});\n\n" + }, + { + "title": "endsWith(str: string)", + "url": "/manual/2.1/string.html#endswithstr-string", + "content": "endsWith(str: string)\n类型:Function\n\n\n功能描述:判断字符串是否以给定的字符串结尾\n\n\n参数:str - string 搜索的字符串\n\n\n返回值:boolean 字符串是否以给定的字符串结尾返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \"Abc\".endsWith(\"C\"); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"aBc\").endsWith(\"c\") // true\n }\n});\n\n" + }, + { + "title": "lcfirst()", + "url": "/manual/2.1/string.html#lcfirst", + "content": "lcfirst()\n类型:Function\n\n\n功能描述:首字母小写\n\n\n参数:无\n\n\n返回值:string 首字母小写后的字符串\n\n示例:原生 JavaScript var result = \"Abc\".lcfirst(); // \"abc\"\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new String(\"abc\").lcfirst() // \"abc\"\n }\n});\n\n" + }, + { + "title": "ucfirst()", + "url": "/manual/2.1/string.html#ucfirst", + "content": "ucfirst()\n类型:Function\n\n\n功能描述:首字母大写\n\n\n参数:无\n\n\n返回值:string 首字母大写后的字符串\n\n示例:原生 JavaScript var result = \"abc\".ucfirst(); // \"Abc\"\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new String(\"abc\").lcfirst() // \"Abc\"\n }\n});\n\n" + }, + { + "title": "escapeHTML()", + "url": "/manual/2.1/string.html#escapehtml", + "content": "escapeHTML()\n类型:Function\n\n\n功能描述:将 HTML 编码,参考:https://www.w3school.com.cn/html/html_entities.asp\n\n\n参数:无\n\n\n返回值:string 编码后的字符串\n\n示例:原生 JavaScript var result = \"test\".escapeHTML(); // <a href='https://www.domain.com'>test</a>\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new String(\"test\").lcfirst() // <a href='https://www.domain.com'>test</a>\n }\n});\n\n" + }, + { + "title": "unescapeHTML()", + "url": "/manual/2.1/string.html#unescapehtml", + "content": "unescapeHTML()\n类型:Function\n\n\n功能描述:将 HTML 实体字符解码,参考:https://www.w3school.com.cn/html/html_entities.asp\n\n\n参数:无\n\n\n返回值:string 解码后的字符串\n\n示例:原生 JavaScript var result = \"<a href='https://www.domain.com'>test</a>\".unescapeHTML(); // test\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"<a href='https://www.domain.com'>test</a>\".unescapeHTML() // test\n }\n});\n\n" + }, + { + "title": "stripTag(tag: string)", + "url": "/manual/2.1/string.html#striptagtag-string", + "content": "stripTag(tag: string)\n类型:Function\n\n\n功能描述:删除 HTML 标签\n\n\n参数:tag - string 待删除标签\n\n\n返回值:string 删除标签后的字符串\n\n示例:原生 JavaScript var result = \"test\".stripTag(\"a\"); // test\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"test\".stripTag(\"a\") // test\n }\n});\n\n" + }, + { + "title": "stripTags(tag: string)", + "url": "/manual/2.1/string.html#striptagstag-string", + "content": "stripTags(tag: string)\n类型:Function\n\n\n功能描述:批量删除 HTML 标签\n\n\n参数:tag - string[] | string 删除指定的标签\n\n\n返回值:string 删除标签后的字符串\n\n示例:原生 JavaScript var result = \"testEM\".stripTags([\"a\", \"i\"]); // testEM\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"testEM\".stripTags([\"a\", \"i\"]) // testEM\n }\n});\n\n" + }, + { + "title": "stripScripts()", + "url": "/manual/2.1/string.html#stripscripts", + "content": "stripScripts()\n类型:Function\n\n\n功能描述:删除 script 标签\n\n\n参数:无\n\n\n返回值:string 删除 script 标签后的字符串\n\n示例:原生 JavaScript var result = 'alert(\"test\");test'.stripScripts(); // test\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = 'alert(\"test\");test'.stripScripts() // \n" + }, + { + "title": "toArray(delimiter: string)", + "url": "/manual/2.1/string.html#toarraydelimiter-string", + "content": "toArray(delimiter: string)\n类型:Function\n\n\n功能描述:将字符串转换为数组\n\n\n参数:delimiter - string 分隔字符\n\n\n返回值:string[] 字符串数组\n\n示例:原生 JavaScript var result = \"a|b|c\".toArray('|'); // [ \"a\", \"b\", \"c\" ]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = \"a|b||c\".toArray('||') // [ \"a|b\", \"c\" ]\n }\n});\n\n" + }, + { + "title": "inspect(useDoubleQuotes: boolean)", + "url": "/manual/2.1/string.html#inspectusedoublequotes-boolean", + "content": "inspect(useDoubleQuotes: boolean)\n类型:Function\n\n\n功能描述:返回一个数组的字符串表示形式\n\n\n参数:useDoubleQuotes - boolean 是否使用双引号引住\n\n\n返回值:string 数组的字符串表示形式\n\n示例:原生 JavaScript var result = \"a|b|c\".inspect(true); // \\\"a|b|c\\\"\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"a|b|c\".inspect(false) // 'a|b|c'\n }\n});\n\n" + }, + { + "title": "hashCode()", + "url": "/manual/2.1/string.html#hashcode", + "content": "hashCode()\n类型:Function\n\n\n功能描述:获取字符串 hash code\n\n\n参数:无\n\n\n返回值:number 字符串的 hash code\n\n示例:原生 JavaScript var result = \"abc\".hashCode(); // 96354\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: number = \"abcABC\".hashCode() // 2870546592\n }\n});\n\n" + }, + { + "title": "random(length: number, type?: RandomType = \"NUMERIC\" | \"LETTER\" | \"LETTER_NUMERIC\" | \"CHINESE\" | undefined)", + "url": "/manual/2.1/string.html#randomlength-number,-type?-randomtype-=-\"numeric\"-|-\"letter\"-|-\"letter_numeric\"-|-\"chinese\"-|-undefined", + "content": "random(length: number, type?: RandomType = \"NUMERIC\" | \"LETTER\" | \"LETTER_NUMERIC\" | \"CHINESE\" | undefined)\n类型:Function\n\n\n功能描述:生成随机字符串\n\n\n参数:length - number 生成字符串的长度\n\n             type - NUMERIC | LETTER | LETTER_NUMERIC | CHINESE | undefined 生成类型,可选参数,当未指定时为 LETTER_NUMERIC NUMERIC - 数字随机字符串\n LETTER - 英文随机字符串\n\n LETTER_NUMERIC - 英文数字混合随机字符串\n\n CHINESE - 中文随机字符串\n返回值:string 随机字符串\n示例:原生 JavaScript var result = String.random(6); // 1Diim2\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = String.random(6, \"NUMERIC\") // 881773\n }\n});\n\n" + } + ] + }, + { + "title": "Window 参考手册", + "content": "", + "url": "/manual/2.1/window.html", + "children": [ + { + "title": "属性", + "url": "/manual/2.1/window.html#属性", + "content": "属性\n\n属性\n描述\n\n\n\n\nbrowser\n浏览器信息对象\n\n\nlocation\nLocation 对象\n\n\n" + }, + { + "title": "方法", + "url": "/manual/2.1/window.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\ncopy\n将字符串复制到剪贴板\n\n\n" + }, + { + "title": "copy(str: string)", + "url": "/manual/2.1/window.html#copystr-string", + "content": "copy(str: string)\n类型:Function\n\n\n功能描述:将字符串复制到剪贴板\n\n\n参数:str - string 字符串\n\n\n返回值:无\n\n示例:原生 JavaScript window.copy(\"这是要复制的字符串\");\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n window.copy(\"这是要复制的字符串\")\n }\n});\n\n" + }, + { + "title": "Browser", + "url": "/manual/2.1/window.html#browser", + "content": "Browser" + }, + { + "title": "Location", + "url": "/manual/2.1/window.html#location", + "content": "Location" + } + ] + }, + { + "title": "HttpCookie 参考手册", + "content": "", + "url": "/manual/2.1/browser.html", + "children": [ + { + "title": "属性", + "url": "/manual/2.1/browser.html#属性", + "content": "属性\n\n属性\n描述\n\n\n\n\nuserAgent\n获取浏览器 User-Agent\n\n\nname\n获取浏览器应用程序名称\n\n\nisMobile\n是否为移动设备\n\n\nisChrome\n是否为 Chrome 浏览器\n\n\nisFirefox\n是否为 Firefox 浏览器\n\n\nisMozilla\n是否为 Mozilla 浏览器\n\n\nisMSIE\n是否为 IE 浏览器\n\n\nisOpera\n是否为 Opera 浏览器\n\n\nisSafari\n是否为 Safari 浏览器\n\n\nisNetscape\n是否为 Netscape 浏览器\n\n\n" + }, + { + "title": "readonly userAgent", + "url": "/manual/2.1/browser.html#readonly-useragent", + "content": "readonly userAgent\n类型:Property\n\n\n功能描述:获取浏览器 User-Agent,等价于 navigator.userAgent\n\n\n返回值:string 浏览器 User-Agent\n\n示例:原生 JavaScript var result = window.browser.userAgent; // Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: String = window.browser.userAgent // Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0\n }\n});\n\n" + }, + { + "title": "readonly name", + "url": "/manual/2.1/browser.html#readonly-name", + "content": "readonly name\n类型:Property\n\n\n功能描述:获取浏览器应用程序名称,等价于 navigator.appName\n\n\n返回值:string 浏览器应用程序名称\n\n示例:原生 JavaScript var result = window.browser.name; // Netscape\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: String = window.browser.name // Netscape\n }\n});\n\n" + }, + { + "title": "readonly isMobile", + "url": "/manual/2.1/browser.html#readonly-ismobile", + "content": "readonly isMobile\n类型:Property\n\n\n功能描述:是否为移动设备,检测依据:User-Agent 中含有 Android、iPhone、iPod、Windows Phone、Mobile、Coolpad、mmp、SmartPhone、midp、wap、xoom、Symbian、J2ME、Blackberry、Wince 其中任意一个字符串\n\n\n返回值:boolean 是移动设备返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isMobile\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isMobile\n }\n});\n\n" + }, + { + "title": "readonly isChrome", + "url": "/manual/2.1/browser.html#readonly-ischrome", + "content": "readonly isChrome\n类型:Property\n\n\n功能描述:是否为 Chrome 浏览器\n\n\n返回值:boolean 是 Chrome 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isChrome;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isChrome\n }\n});\n\n" + }, + { + "title": "readonly isFirefox", + "url": "/manual/2.1/browser.html#readonly-isfirefox", + "content": "readonly isFirefox\n类型:Property\n\n\n功能描述:是否为 Firefox 浏览器\n\n\n返回值:boolean 是 Firefox 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isFirefox;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isFirefox\n }\n});\n\n" + }, + { + "title": "readonly isMSIE", + "url": "/manual/2.1/browser.html#readonly-ismsie", + "content": "readonly isMSIE\n类型:Property\n\n\n功能描述:是否为 IE 浏览器\n\n\n返回值:boolean 是 IE 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isMSIE;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isMSIE\n }\n});\n\n" + }, + { + "title": "readonly isOpera", + "url": "/manual/2.1/browser.html#readonly-isopera", + "content": "readonly isOpera\n类型:Property\n\n\n功能描述:是否为 Opera 浏览器\n\n\n返回值:boolean 是 Opera 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isOpera;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isOpera\n }\n});\n\n" + }, + { + "title": "readonly isSafari", + "url": "/manual/2.1/browser.html#readonly-issafari", + "content": "readonly isSafari\n类型:Property\n\n\n功能描述:是否为 Safari 浏览器\n\n\n返回值:boolean 是 Safari 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isSafari;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isSafari\n }\n});\n\n" + }, + { + "title": "readonly isNetscape", + "url": "/manual/2.1/browser.html#readonly-isnetscape", + "content": "readonly isNetscape\n类型:Property\n\n\n功能描述:是否为 Netscape 浏览器\n\n\n返回值:boolean 是 Netscape 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isNetscape;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isNetscape\n }\n});\n\n" + } + ] + }, + { + "title": "Location 参考手册", + "content": "", + "url": "/manual/2.1/location.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.1/location.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\ngetParameters\n获取所有的请求参数及值\n\n\ngetParameter\n获取指定请求参数的值\n\n\n" + }, + { + "title": "getParameters()", + "url": "/manual/2.1/location.html#getparameters", + "content": "getParameters()\n类型:Function\n\n\n功能描述:获取所有的请求参数及值\n\n\n参数:无\n\n\n返回值:Record 当前请求 URL 中的所有的请求参数及值\n\n示例:原生 JavaScript var result = location.getParameters();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: Record = location.getParameters()\n }\n});\n\n" + }, + { + "title": "getParameter(name: string)", + "url": "/manual/2.1/location.html#getparametername-string", + "content": "getParameter(name: string)\n类型:Function\n\n\n功能描述:获取指定请求参数的值\n\n\n参数:string 参数名称\n\n\n返回值:any 请求参数的值\n\n示例:原生 JavaScript var result = location.getParameter(\"action\");\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: any = location.getParameter('action');\n }\n});\n\n" + } + ] + }, + { + "title": "API", + "content": "Buession Prototype API 包含以下目录:PrototypeTryOptionalArrayDateDocumentFunctionMathNumberObjectStringWindow", + "url": "/manual/2.0/index.html", + "children": [] + }, + { + "title": "Prototype 参考手册", + "content": "", + "url": "/manual/2.0/prototype.html", + "children": [ + { + "title": "属性", + "url": "/manual/2.0/prototype.html#属性", + "content": "属性\n\n属性\n描述\n\n\n\n\nversion\n获取 Buession Prototype 版本\n\n\n" + }, + { + "title": "方法", + "url": "/manual/2.0/prototype.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nemptyFunction\n执行一个空方法\n\n\nK\n返回参数传递的任意值\n\n\n" + }, + { + "title": "version", + "url": "/manual/2.0/prototype.html#version", + "content": "version\n类型:String\n\n\n功能描述:获取 Buession Prototype 版本\n\n\n返回值:Buession Prototype 版本\n\n示例:原生 JavaScript var ver = Prototype.version;\n\nvue \n Prototype 版本:{Prototype.version}\n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n }\n});\n\n" + }, + { + "title": "emptyFunction()", + "url": "/manual/2.0/prototype.html#emptyfunction", + "content": "emptyFunction()\n类型:Function\n\n\n功能描述:执行一个空方法\n\n\n参数:无\n\n\n返回值:void\n\n示例:原生 JavaScript Prototype.emptyFunction();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n Prototype.emptyFunction()\n }\n});\n\n" + }, + { + "title": "K(x: any)", + "url": "/manual/2.0/prototype.html#kx-any", + "content": "K(x: any)\n类型:Function\n\n\n功能描述:返回参数传递的任意值\n\n\n参数:x - any 任意值\n\n\n返回值:any 参数传递的任意值\n\n示例:原生 JavaScript var v = Prototype.K(object);\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const v: any = Prototype.K(object)\n }\n});\n\n" + } + ] + }, + { + "title": "Try 参考手册", + "content": "", + "url": "/manual/2.0/try.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.0/try.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nthese\n接收任意数目的函数作为参数,返回第一个执行成功的函数(未抛出异常的函数)的结果\n\n\n" + }, + { + "title": "these(args: any[])", + "url": "/manual/2.0/try.html#theseargs-any[]", + "content": "these(args: any[])\n类型:Function\n\n\n功能描述:接收任意数目的函数作为参数,返回第一个执行成功的函数(未抛出异常的函数)的结果\n\n\n参数:args any[] 一个或多个 function 作为参数\n\n\n返回值:any 任意函数参数执行结果\n\n示例:原生 JavaScript var result = Try.these(function(){\n\n },\n\n function() {\n\n });\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result:any = Try.these(function(){\n\n },\n\n function() {\n\n })\n }\n});\n\n" + } + ] + }, + { + "title": "Optional 参考手册", + "content": "Optional 类是一个可以为 null 或 undefined 的容器对象,如果值 value 存在则 isPresent() 方法会返回 true,调用 get() 方法会返回 value 的值。其设计思想,参考 java8 的 Optional使用方式,在构造函数中传入任意类型值;Optional 提供很多有用的方法,这样我们就不用显式进行 null 值和 undefined 的检测。", + "url": "/manual/2.0/optional.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.0/optional.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nof\n返回一个指定 T 类型的值的 Optional 实例\n\n\nofNullable\n如果为非 null 或 undefined,返回 Optional 描述的指定值的实例,否则返回空的 Optional 实例\n\n\nempty\n返回空的 Optional 实例\n\n\nget\n如果 value 不为 null 或 undefined,则返回 value 的值;否则抛出异常\n\n\norElse\n如果 value 不为 null 或 undefined,则返回 value 的值;否则返回 other\n\n\nisPresent\n如果 value 不为 null 或 undefined,则返回 true;否则返回 false\n\n\n var optional = new Optional(any value);\n\n" + }, + { + "title": "static of(value: T)", + "url": "/manual/2.0/optional.html#static-ofvalue-t", + "content": "static of(value: T)\n类型:Function\n\n\n功能描述:返回一个指定 T 类型的值的 Optional 实例\n\n\n参数:value - any of T 任意类型的值\n\n\n返回值:Object T 类型的值的 Optional 实例\n\n示例:原生 JavaScript Optional.of(11);\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: boolean = Optional.of(false)\n }\n});\n\n" + }, + { + "title": "static ofNullable(value: T)", + "url": "/manual/2.0/optional.html#static-ofnullablevalue-t", + "content": "static ofNullable(value: T)\n类型:Function\n\n\n功能描述:如果为非 null 或 undefined,返回 Optional 描述的指定值的实例,否则返回空的 Optional 实例\n\n\n参数:value - any as T 任意类型的值\n\n\n返回值:Object T 类型的值的 Optional 实例,或空的 Optional 实例\n\n示例:原生 JavaScript Optional.ofNullable('js');\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: number = Optional.ofNullable(11)\n }\n});\n\n" + }, + { + "title": "static empty()", + "url": "/manual/2.0/optional.html#static-empty", + "content": "static empty()\n类型:Function\n\n\n功能描述:返回空的 Optional 实例\n\n\n参数:无\n\n\n返回值:Object as Optional 空的 Optional 实例\n\n示例:原生 JavaScript Optional.empty();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: null Optional.empty()\n }\n});\n\n" + }, + { + "title": "get()", + "url": "/manual/2.0/optional.html#get", + "content": "get()\n类型:Function\n\n\n功能描述:如果 value 不为 null 或 undefined,则返回 value 的值;否则抛出异常\n\n\n参数:无\n\n\n返回值:any as T Optional 中包含这个值\n\n示例:原生 JavaScript var optional = Optional.of(11);\n var result = optional.get(); // 11\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: number = Optional.of(11)\n const result = optional.get() // 11\n }\n});\n\n" + }, + { + "title": "orElse(other: T)", + "url": "/manual/2.0/optional.html#orelseother-t", + "content": "orElse(other: T)\n类型:Function\n\n\n功能描述:如果 value 不为 null 或 undefined,则返回 value 的值;否则返回 other\n\n\n参数:other - any of T 任意类型的值\n\n\n返回值:any as T value 不为 null 或 undefined,则返回 value 的值;否则返回 other\n\n示例:原生 JavaScript var optional = Optional.of(null);\n var result = optional.orElse(\"abc\"); // abc\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: boolean = Optional.of(undefined)\n const result = optional.orElse(false) // false\n }\n});\n\n" + }, + { + "title": "isPresent()", + "url": "/manual/2.0/optional.html#ispresent", + "content": "isPresent()\n类型:Function\n\n\n功能描述:如果 value 不为 null 或 undefined,则返回 true;否则返回 false\n\n\n参数:无\n\n\n返回值:boolean value 不为 null 或 undefined,则返回 true;否则返回 false\n\n示例:原生 JavaScript var optional = Optional.of(null);\n var result = optional.isPresent(); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const optional: number = Optional.of(11)\n const result = optional.isPresent() // true\n }\n});\n\n" + } + ] + }, + { + "title": "Array 参考手册", + "content": "", + "url": "/manual/2.0/array.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.0/array.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nisEmpty\n判断数组是否为空数组\n\n\nexists\n判断元素 item 是否在数组中\n\n\nfirst\n获取数组第一个元素\n\n\nlast\n获取数组最后一个元素\n\n\neach\n按顺序为数组中的每个元素调用一次函数\n\n\nsize\n获取数组大小\n\n\nmerge\n连接两个或多个数组\n\n\ncompact\n返回一个不包含 null/undefined 值元素的数组的新版本\n\n\nunique\n对数组的元素进行去重\n\n\nwithout\n返回不包括参数中任意一个指定值的数组\n\n\nclone\n克隆数组\n\n\nclear\n清空数组\n\n\n" + }, + { + "title": "isEmpty()", + "url": "/manual/2.0/array.html#isempty", + "content": "isEmpty()\n类型:Function\n\n\n功能描述:判断数组是否为空数组\n\n\n参数:无\n\n\n返回值:boolean 数组为空,返回 true;否则返回 false\n\n示例:原生 JavaScript var result = [].isEmpty(); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = ['a', 'b', 'c'].isEmpty() // false\n }\n});\n\n" + }, + { + "title": "exists(item: any)", + "url": "/manual/2.0/array.html#existsitem-any", + "content": "exists(item: any)\n类型:Function\n\n\n功能描述:判断元素 item 是否在数组中\n\n\n参数:item - any 待检测元素\n\n\n返回值:boolean 元素 item 是否在数组中返回 true;否则返回 false\n\n示例:原生 JavaScript var result = ['a', 'b'].exists('a'); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = ['1', '2'].exists(2) // false\n }\n});\n\n" + }, + { + "title": "first()", + "url": "/manual/2.0/array.html#first", + "content": "first()\n类型:Function\n\n\n功能描述:获取数组第一个元素\n\n\n参数:无\n\n\n返回值:any 数组第一个元素\n\n示例:原生 JavaScript var result = ['a', 'b'].first(); // a\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = [1, 2].first() // 1\n }\n});\n\n" + }, + { + "title": "last()", + "url": "/manual/2.0/array.html#last", + "content": "last()\n类型:Function\n\n\n功能描述:获取数组最后一个元素\n\n\n参数:无\n\n\n返回值:any 数组最后一个元素\n\n示例:原生 JavaScript var result = ['a', 'b'].last(); // b\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = [1, 2].last() // 2\n }\n});\n\n" + }, + { + "title": "each(callback: (value: T, index: number, array: readonly T[]) => void, thisArg?: any)", + "url": "/manual/2.0/array.html#eachcallback-value-t,-index-number,-array-readonly-t[]-=>-void,-thisarg?-any", + "content": "each(callback: (value: T, index: number, array: readonly T[]) => void, thisArg?: any)\n类型:Function\n\n\n功能描述:按顺序为数组中的每个元素调用一次函数,forEach的别名\n\n\n参数:callback - (value: T, index: number, array: readonly T[]) => void as Function callback 为数组中的每个元素运行的函数,其中:value 为前元素的值,index 为当前元素的数组索引,array 为当前元素所属的数组对象\nany thisArg 可选。要传递给函数以用作其 \"this\" 值的值,如果此参数为空,则值 \"undefined\" 将作为其 \"this\" 值传递\n\n\n返回值:void\n\n示例:原生 JavaScript ['a', 'b'].each(function (currentValue) {\n console.log(currentValue)\n });\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n ['a', 'b'].each(function (currentValue) {\n console.log(currentValue)\n })\n }\n});\n\n" + }, + { + "title": "size()", + "url": "/manual/2.0/array.html#size", + "content": "size()\n类型:Function\n\n\n功能描述:获取数组大小\n\n\n参数:无\n\n\n返回值:number 数组大小\n\n示例:原生 JavaScript var result = ['a', 'b'].size(); // 2\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: number = [].size() // 0\n }\n});\n\n" + }, + { + "title": "merge(...items: T[])", + "url": "/manual/2.0/array.html#merge...items-t[]", + "content": "merge(...items: T[])\n类型:Function\n\n\n功能描述:连接两个或多个数组\n\n\n参数:items - any as T 待连接的 T 类型的数组\n\n\n返回值:Array 已连接数组的副本\n\n示例:原生 JavaScript var result = [1, 3].merge(2, 4); // [1, 3, 2, 4]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n console result: string[] = ['a', 'b'].merge('c', 'd') // [a, b, c, d]\n }\n});\n\n" + }, + { + "title": "compact()", + "url": "/manual/2.0/array.html#compact", + "content": "compact()\n类型:Function\n\n\n功能描述:返回一个不包含 null/undefined 值元素的数组的新版本\n\n\n参数:无\n\n\n返回值:Array 不包含 null/undefined 值元素的数组的新版本\n\n示例:原生 JavaScript var result = ['a', 'b', null, 'c', 'd'].compact(); // [a, b, c, d]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = ['a', 'b', null, 'c', 'd', undefined].compact() // [a, b, c, d]\n }\n});\n\n" + }, + { + "title": "unique()", + "url": "/manual/2.0/array.html#unique", + "content": "unique()\n类型:Function\n\n\n功能描述:对数组的元素进行去重\n\n\n参数:无\n\n\n返回值:Array 数组元素进行去重后的新版本\n\n示例:原生 JavaScript var result = ['a', 'b', 'c', 'd', 'b', 'd'].unique(); // [a, b, c, d]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = ['a', 'b', 'c', 'c', 'd'].unique() // [a, b, c, d]\n }\n});\n\n" + }, + { + "title": "without(values: T[])", + "url": "/manual/2.0/array.html#withoutvalues-t[]", + "content": "without(values: T[])\n类型:Function\n\n\n功能描述:返回不包括参数中任意一个指定值的数组\n\n\n参数:values - any as T[] 排除值数组\n\n\n返回值:Array 不包括参数中任意一个指定值的数组\n\n示例:原生 JavaScript var result = ['a', 'b', 'c', 'd', 'b', 'd'].without('a', 'b'); // [c, d]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = ['a', 'b', 'c', 'd', 'b', 'd'].without('a', 'b') // [c, d]\n }\n});\n\n" + }, + { + "title": "clone()", + "url": "/manual/2.0/array.html#clone", + "content": "clone()\n类型:Function\n\n\n功能描述:克隆数组\n\n\n参数:无\n\n\n返回值:Array 克隆结果\n\n示例:原生 JavaScript var result = ['a', 'b'].clone(); // [a, b]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = ['a', 'b'].clone() // [a, b]\n }\n});\n\n" + }, + { + "title": "clear()", + "url": "/manual/2.0/array.html#clear", + "content": "clear()\n类型:Function\n\n\n功能描述:清空数组\n\n\n参数:无\n\n\n返回值:Array 空数组\n\n示例:原生 JavaScript var result = ['a', 'b'].clear(); // []\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = ['a', 'b'].clear() // []\n }\n});\n\n" + } + ] + }, + { + "title": "Date 参考手册", + "content": "", + "url": "/manual/2.0/date.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.0/date.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nisLeapYear\n判断是否为闰年\n\n\ngetSeason\n获取季节\n\n\ngetDayOfYear\n获取年份中的第几天\n\n\ngetDaysOfYear\n获取年份总天数\n\n\nformat\n将日期时间格式化为字符串\n\n\n" + }, + { + "title": "isLeapYear()", + "url": "/manual/2.0/date.html#isleapyear", + "content": "isLeapYear()\n类型:Function\n\n\n功能描述:判断是否为闰年\n\n\n参数:无\n\n\n返回值:boolean 是闰年,返回 true;否则返回 false\n\n示例:原生 JavaScript var result = new Date('2000-04-11').isLeapYear(); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new Date('2000-04-11').isLeapYear() // false\n }\n});\n\n" + }, + { + "title": "getSeason()", + "url": "/manual/2.0/date.html#getseason", + "content": "getSeason()\n类型:Function\n\n\n功能描述:获取季节\n\n\n参数:无\n\n\n返回值:number 依次返回 0 至 3 的整数,表示春季、夏季、秋季、冬季\n\n示例:原生 JavaScript var result = new Date('2000-04-11').isLeapYear(); // 0\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new Date('2022-01-11').isLeapYear() // 3\n }\n});\n\n" + }, + { + "title": "getDayOfYear()", + "url": "/manual/2.0/date.html#getdayofyear", + "content": "getDayOfYear()\n类型:Function\n\n\n功能描述:获取年份中的第几天\n\n\n参数:无\n\n\n返回值:number 年份中的第几天\n\n示例:原生 JavaScript var result = new Date('2022-02-11').getDayOfYear(); // 42\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: number = new Date('2022-03-01').getDayOfYear(); // 61\n }\n});\n\n" + }, + { + "title": "getDaysOfYear()", + "url": "/manual/2.0/date.html#getdaysofyear", + "content": "getDaysOfYear()\n类型:Function\n\n\n功能描述:获取年份总天数\n\n\n参数:无\n\n\n返回值:number 年份总天数\n\n示例:原生 JavaScript var result = new Date('2022-02-11').getDaysOfYear(); // 365\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: number = new Date('2020-02-11').getDaysOfYear() // 366\n }\n});\n\n" + }, + { + "title": "format(format: string)", + "url": "/manual/2.0/date.html#formatformat-string", + "content": "format(format: string)\n类型:Function\n\n\n功能描述:将日期时间格式化为字符串\n\n\n参数:format - String format 格式字符串\n y - 年\n\n n - 季度(1 到 4)\n\n N - 季度名称\n\n A - 季度中文名称\n\n M - 月\n\n f - 月(Jan 到 Dec)\n\n F - 月(January 到 December)\n\n C - 月,中文名称\n\n d - 日\n\n Y - 年份中的第几天(0 到 365)\n\n T - 月份有几天(28 到 30)\n\n j - 每月天数后面的英文后缀(st,nd,rd 或者 th)\n\n e - 星期几,数字表示,0(表示星期天)到 6(表示星期六)\n\n E - 星期几,数字表示,1(表示星期一)到 7(表示星期天)\n\n l - 星期几,文本表示,3 个字母(Mon 到 Sun)\n\n L - 星期几,完整的文本格式(Sunday 到 Saturday)\n\n w - 星期几,中文名称\n\n W - 一月中第几个星期几\n\n i - 月份中的第几周\n\n o - 年份中的第几周\n\n h - 小时(1~12)\n\n H - 小时(0~23)\n\n m - 分\n\n s - 秒\n\n S - 毫秒\n\n a - 上午/下午标记\n\n O - 与格林威治时间相差的小时数\n\n P - 与格林威治时间相差的小时数,小时和分钟之间有冒号分隔\n \n Z - 时区\n\n\n\n返回值:string 格式化后的日期时间\n\n示例:原生 JavaScript var result = new Date('2022-01-11').format(\"f-dd,yyyy\"); // Jan-11,2022\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new Date('2022-01-11').format(\"f-dd,yy\"); // Jan-11,22\n }\n});\n\n" + } + ] + }, + { + "title": "Document 参考手册", + "content": "", + "url": "/manual/2.0/document.html", + "children": [ + { + "title": "属性", + "url": "/manual/2.0/document.html#属性", + "content": "属性\n\n属性\n描述\n\n\n\n\nfullScreen\n检测当前文档是否全屏\n\n\nfullScreenEnabled\n检测当前浏览器是否支持全屏模式\n\n\nfullScreenElement\n检测当前文档中正在以全屏模式显示的 Element 节点\n\n\nfullScreen\n检测当前文档是否全屏\n\n\n" + }, + { + "title": "方法", + "url": "/manual/2.0/document.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nrequestFullscreen\n请求进入全屏模式\n\n\nexitFullscreen\n退出全屏模式\n\n\n" + }, + { + "title": "readonly fullScreen", + "url": "/manual/2.0/document.html#readonly-fullscreen", + "content": "readonly fullScreen\n类型:Property\n\n\n功能描述:检测当前文档是否全屏\n\n\n参数:无\n\n\n返回值:boolean 当前文档是否全屏,返回 true;否则返回 false\n\n示例:原生 JavaScript var result = document.fullScreen;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = document.fullScreen;\n }\n});\n\n" + }, + { + "title": "readonly fullScreenEnabled", + "url": "/manual/2.0/document.html#readonly-fullscreenenabled", + "content": "readonly fullScreenEnabled\n类型:Property\n\n\n功能描述:检测当前浏览器是否支持全屏模式\n\n\n返回值:boolean 当前浏览器是否支持全屏模式返回 true;否则返回 false\n\n示例:原生 JavaScript var result = document.fullScreenEnabled;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = document.fullScreenEnabled\n }\n});\n\n" + }, + { + "title": "readonly fullScreenElement", + "url": "/manual/2.0/document.html#readonly-fullscreenelement", + "content": "readonly fullScreenElement\n类型:Property\n\n\n功能描述:检测当前文档中正在以全屏模式显示的 Element 节点\n\n\n返回值:boolean 当前文档中正在以全屏模式显示的 Element 节点,返回 true;否则返回 false\n\n示例:原生 JavaScript var result = document.fullScreenElement;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = document.fullScreenElement\n }\n});\n\n" + }, + { + "title": "requestFullscreen()", + "url": "/manual/2.0/document.html#requestfullscreen", + "content": "requestFullscreen()\n类型:Function\n\n\n功能描述:请求进入全屏模式\n\n\n参数:无\n\n\n返回值:Promise Promise\n\n示例:原生 JavaScript var result = document.requestFullscreen();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: Promise = document.requestFullscreen()\n }\n});\n\n" + }, + { + "title": "exitFullscreen()", + "url": "/manual/2.0/document.html#exitfullscreen", + "content": "exitFullscreen()\n类型:Function\n\n\n功能描述:退出全屏模式\n\n\n参数:无\n\n\n返回值:Promise Promise\n\n示例:原生 JavaScript var result = document.exitFullscreen();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: Promise = document.exitFullscreen()\n }\n});\n\n" + } + ] + }, + { + "title": "Function 参考手册", + "content": "", + "url": "/manual/2.0/function.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.0/function.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nargumentNames\n获取函数参数名称\n\n\ndelay\n延时执行函数\n\n\n" + }, + { + "title": "argumentNames(...args: any)", + "url": "/manual/2.0/function.html#argumentnames...args-any", + "content": "argumentNames(...args: any)\n类型:Function\n\n\n功能描述:获取函数参数名称\n\n\n参数:args - any 1个或多个任意类型的可变参数可变参数\n\n\n返回值:string[] | null 函数参数名称列表\n\n示例:原生 JavaScript var fn = function(a, b, c){\n\n }\n var result = fn.argumentNames();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const fn = function(a: boolean, b: number, c: String) {\n\n }\n const result: string[] | null = fn.argumentNames()\n }\n});\n\n" + }, + { + "title": "delay(timeout: number)", + "url": "/manual/2.0/function.html#delaytimeout-number", + "content": "delay(timeout: number)\n类型:Function\n\n\n功能描述:延时执行函数\n\n\n参数:timeout - number 延时时间(单位:秒)\n\n\n返回值:any 函数返回值\n\n示例:原生 JavaScript var fn = function(a, b, c){\n return a + b + c;\n }\n var result = fn.delay(3)\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const fn = function(a: boolean, b: number, c: number) {\n return a ? b : c\n }\n const result: any = fn.delay(3)\n }\n});\n\n" + } + ] + }, + { + "title": "Function 参考手册", + "content": "", + "url": "/manual/2.0/math.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.0/math.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nrand\n延时执行函数\n\n\n" + }, + { + "title": "rand(min: number, max?: number)", + "url": "/manual/2.0/math.html#randmin-number,-max?-number", + "content": "rand(min: number, max?: number)\n类型:Function\n\n\n功能描述:产生一个指定范围内的随机数\n\n\n参数:min - number 返回的最低值\n           max - number 返回的最高值\n\n\n返回值:number 随机数\n\n示例:原生 JavaScript var result = Math.rand(1, 5); //\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: number = Math.rand(1, 5)\n }\n});\n\n" + } + ] + }, + { + "title": "Number 参考手册", + "content": "", + "url": "/manual/2.0/number.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.0/number.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\ntoPaddedString\n延时执行函数\n\n\nisOdd\n判断数字是否为奇数\n\n\nisEven\n判断数字是否为偶数\n\n\nisBetween\n判断一个数字是否在另两个数字之间\n\n\n" + }, + { + "title": "toPaddedString(length: number, radix: number)", + "url": "/manual/2.0/number.html#topaddedstringlength-number,-radix-number", + "content": "toPaddedString(length: number, radix: number)\n类型:Function\n\n\n功能描述:数字填充\n\n\n参数:length - number 长度\n           radix - number 进制\n\n\n返回值:string 填充后的字符串数字\n\n示例:原生 JavaScript var result = new Number(5).toPaddedString(12, 2); // 0000000000101\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new Number(5).toPaddedString(12, 8) // 0000000000005\n }\n});\n\n" + }, + { + "title": "isOdd(num: number)", + "url": "/manual/2.0/number.html#isoddnum-number", + "content": "isOdd(num: number)\n类型:Function\n\n\n功能描述:判断数字是否为奇数\n\n\n参数:num - number 需要判断的数字\n\n\n返回值:boolean 数字是为奇数返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Number.isOdd(255); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Number.isOdd(256) // false\n }\n});\n\n" + }, + { + "title": "isEven(num: number)", + "url": "/manual/2.0/number.html#isevennum-number", + "content": "isEven(num: number)\n类型:Function\n\n\n功能描述:判断数字是否为偶数\n\n\n参数:num - number 需要判断的数字\n\n\n返回值:boolean 数字是为偶数返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Number.isEven(255); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Number.isOdd(256) // true\n }\n});\n\n" + }, + { + "title": "isBetween(num: number, min: number, max: number, match?: boolean | undefined)", + "url": "/manual/2.0/number.html#isbetweennum-number,-min-number,-max-number,-match?-boolean-|-undefined", + "content": "isBetween(num: number, min: number, max: number, match?: boolean | undefined)\n类型:Function\n\n\n功能描述:判断一个数字是否在另两个数字之间\n\n\n参数:num - number 需要判断的数字\n           min - number 最小值\n           max - number 最大值\n           match - boolean | undefined 是否包含最小值或最大值\n\n\n返回值:boolean 数字是否在另两个数字之间,返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Number.isBetween(4, 3, 5); // true\n var result = Number.isBetween(4, 4, 5); // false\n var result = Number.isBetween(4, 4, 5, true); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Number.isBetween(4, 3, 5) // true\n const result: boolean = Number.isBetween(4, 4, 5) // false\n const result: boolean = Number.isBetween(4, 4, 5, true) // true\n }\n});\n\n" + } + ] + }, + { + "title": "Object 参考手册", + "content": "", + "url": "/manual/2.0/object.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.0/object.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\ntype\n获取对象数据类型\n\n\nrawType\n获取对象原始数据类型\n\n\nisObject\n判断对象是否为 object 类型\n\n\nisPlainObject\n判断对象是否为简单 object 类型\n\n\nisMap\n判断对象是否为 Map 类型\n\n\nisSet\n判断对象是否为 Set 类型\n\n\nisSymbol\n判断对象是否为 Symbol\n\n\nisPromise\n判断对象是否为 Promise\n\n\nisPrimitive\n判断对象是否为原始类型\n\n\nisFunction\n判断对象是否为函数\n\n\nisArray\n判断对象是否为数组\n\n\nisString\n判断对象是否为字符串对象\n\n\nisNumber\n判断对象是否为数字对象\n\n\nisBoolean\n判断对象是否为布尔对象\n\n\nisRegExp\n判断对象是否为正则对象\n\n\nisFile\n判断对象是否为文件对象\n\n\nisWindow\n判断对象是否为 windows 对象\n\n\nisElement\n判断对象是否为 Element\n\n\nisEvent\n判断对象是否为事件对象\n\n\nisNull\n判断对象是否为 null 对象\n\n\nisUndefined\n判断对象是否为未定义\n\n\nisUndefinedOrNull\n判断对象是否为未定义或 null\n\n\nclone\n克隆对象\n\n\n" + }, + { + "title": "type(obj: any)", + "url": "/manual/2.0/object.html#typeobj-any", + "content": "type(obj: any)\n类型:Function\n\n\n功能描述:获取对象数据类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:string 对象数据类型\n\n示例:原生 JavaScript var result = Object.type(true); // boolean\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = Object.type(4.4) // number\n }\n});\n\n" + }, + { + "title": "rawType(obj: any)", + "url": "/manual/2.0/object.html#rawtypeobj-any", + "content": "rawType(obj: any)\n类型:Function\n\n\n功能描述:获取对象原始数据类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:string 原始数据类型\n\n示例:原生 JavaScript var result = Object.type(\"4.4\"); // String\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = Object.type(4.4) // Number\n }\n});\n\n" + }, + { + "title": "isObject(obj: any)", + "url": "/manual/2.0/object.html#isobjectobj-any", + "content": "isObject(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 object 类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为 object 类型返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isObject(\"1\"); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isObject(new String(\"1\")) // true\n }\n});\n\n" + }, + { + "title": "isPlainObject(obj: any)", + "url": "/manual/2.0/object.html#isplainobjectobj-any", + "content": "isPlainObject(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为简单 object 类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为简单 object 类型返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isPlainObject(new String(\"1\")); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isPlainObject({\"a\":\"A\"}) // true\n }\n});\n\n" + }, + { + "title": "isMap(obj: any)", + "url": "/manual/2.0/object.html#ismapobj-any", + "content": "isMap(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 Map 类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为 Map 类型返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isMap(new Map()); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isMap({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isSet(obj: any)", + "url": "/manual/2.0/object.html#issetobj-any", + "content": "isSet(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 Map 类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为 Set 类型返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isSet(new Set()); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isSet({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isSymbol(obj: any)", + "url": "/manual/2.0/object.html#issymbolobj-any", + "content": "isSymbol(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 Symbol\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为 Symbol 返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isSymbol(Symbol('a')); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isSymbol({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isPromise(obj: any)", + "url": "/manual/2.0/object.html#ispromiseobj-any", + "content": "isPromise(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 Promise\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为 Promise 返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isPromise(new Promise(function(){})); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isPromise({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isPrimitive(obj: any)", + "url": "/manual/2.0/object.html#isprimitiveobj-any", + "content": "isPrimitive(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为原始类型\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为原始类型返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isPrimitive(11); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isPromise({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isFunction(obj: any)", + "url": "/manual/2.0/object.html#isfunctionobj-any", + "content": "isFunction(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为函数\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为函数返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isFunction(location.href); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isFunction(\"a\".replace) // true\n }\n});\n\n" + }, + { + "title": "isArray(obj: any)", + "url": "/manual/2.0/object.html#isarrayobj-any", + "content": "isArray(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为数组\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为数组返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isArray([1, 2]); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isArray({\"a\":\"A\"}) // false\n }\n});\n\n" + }, + { + "title": "isString(obj: any)", + "url": "/manual/2.0/object.html#isstringobj-any", + "content": "isString(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为字符串对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为字符串返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isString(1); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isString(\"1\") // true\n }\n});\n\n" + }, + { + "title": "isNumber(obj: any)", + "url": "/manual/2.0/object.html#isnumberobj-any", + "content": "isNumber(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为数字对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为数字对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isNumber(1.0); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isNumber(\"1.0\") // false\n }\n});\n\n" + }, + { + "title": "isBoolean(obj: any)", + "url": "/manual/2.0/object.html#isbooleanobj-any", + "content": "isBoolean(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为布尔对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象为布尔对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isBoolean(false); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isBoolean(1) // false\n }\n});\n\n" + }, + { + "title": "isRegExp(obj: any)", + "url": "/manual/2.0/object.html#isregexpobj-any", + "content": "isRegExp(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为正则对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为正则对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isRegExp(/^[a-z]$/); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isRegExp('/^[a-z]$/') // false\n }\n});\n\n" + }, + { + "title": "isFile(obj: any)", + "url": "/manual/2.0/object.html#isfileobj-any", + "content": "isFile(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为文件对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为文件对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isFile(new File(['text1', 'text2'], 'test.txt', {type: 'text/plain'})); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = bject.isFile(document) // false\n }\n});\n\n" + }, + { + "title": "isWindow(obj: any)", + "url": "/manual/2.0/object.html#iswindowobj-any", + "content": "isWindow(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 windows 对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为 windows 对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isWindow(window); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isWindow(document) // false\n }\n});\n\n" + }, + { + "title": "isElement(obj: any)", + "url": "/manual/2.0/object.html#iselementobj-any", + "content": "isElement(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 Element\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为 Element 返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isElement(document); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isElement(document.body) // false\n }\n});\n\n" + }, + { + "title": "isEvent(obj: any)", + "url": "/manual/2.0/object.html#iseventobj-any", + "content": "isEvent(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为事件对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为事件对象返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isEvent(document.onclick); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isEvent(document.onclick) // false\n }\n});\n\n" + }, + { + "title": "isNull(obj: any)", + "url": "/manual/2.0/object.html#isnullobj-any", + "content": "isNull(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为 null\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为 null 返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isNull(null); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isNull(\"A\") // false\n }\n});\n\n" + }, + { + "title": "isUndefined(obj: any)", + "url": "/manual/2.0/object.html#isundefinedobj-any", + "content": "isUndefined(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为未定义\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为未定义返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isUndefined(a); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isUndefined(b) // true\n }\n});\n\n" + }, + { + "title": "isUndefinedOrNull(obj: any)", + "url": "/manual/2.0/object.html#isundefinedornullobj-any", + "content": "isUndefinedOrNull(obj: any)\n类型:Function\n\n\n功能描述:判断对象是否为未定义或 null\n\n\n参数:obj - any 对象变量\n\n\n返回值:boolean 对象是否为未定义或 null 返回 true;否则返回 false\n\n示例:原生 JavaScript var result = Object.isUndefinedOrNull(a); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = Object.isUndefinedOrNull(document.body) // false\n }\n});\n\n" + }, + { + "title": "clone(obj: any)", + "url": "/manual/2.0/object.html#cloneobj-any", + "content": "clone(obj: any)\n类型:Function\n\n\n功能描述:克隆对象\n\n\n参数:obj - any 对象变量\n\n\n返回值:any 新对象实例\n\n示例:原生 JavaScript var result = Object.clone({\"a\": \"A\"}); // {\"a\": \"A\"}\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: any = Object.clone({\"a\":\"A\"}) // {\"a\": \"A\"}\n }\n});\n\n" + } + ] + }, + { + "title": "String 参考手册", + "content": "", + "url": "/manual/2.0/string.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.0/string.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\nexists\n判断字符串是否存在\n\n\nequals\n判断字符串是否相等\n\n\nequalsIgnoreCase\n判断字符串是否相等,不考虑大小写\n\n\nisEmpty\n判断是否为空字符串\n\n\nisNotEmpty\n判断是否不为空字符串\n\n\nisBlank\n判断是否为空白字符串\n\n\nrepeat\n重复一个字符串\n\n\nleft\n截取字符串左边边指定数目的字符串\n\n\nright\n截取字符串右边指定数目的字符串\n\n\ntruncation\n截取字符串,超出部分用 truncation 替代\n\n\nltrim\n删除字符串开头的空白字符\n\n\nrtrim\n删除字符串结尾的空白字符\n\n\nstartsWith\n判断字符串是否以给定的字符串开头\n\n\nendsWith\n判断字符串是否以给定的字符串结尾\n\n\nlcfirst\n首字母小写\n\n\nucfirst\n首字母大写\n\n\nescapeHTML\n将 HTML 编码\n\n\nunescapeHTML\n将 HTML 实体字符解码\n\n\nstripTag\n删除 HTML 标签\n\n\nstripTags\n批量删除 HTML 标签\n\n\nstripScripts\n删除 script 标签\n\n\ntoArray\n将字符串转换为数组\n\n\ninspect\n返回一个数组的字符串表示形式\n\n\nhashCode\n获取字符串 hash code\n\n\nrandom\n生成随机字符串\n\n\n" + }, + { + "title": "exists(str: string)", + "url": "/manual/2.0/string.html#existsstr-string", + "content": "exists(str: string)\n类型:Function\n\n\n功能描述:判断字符串是否存在\n\n\n参数:str - string 子字符串\n\n\n返回值:boolean 子字符串存在返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \"ABC\".exists(\"A\"); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = \"ABC\".exists(\"a\") // false\n }\n});\n\n" + }, + { + "title": "equals(str: string | undefined | null)", + "url": "/manual/2.0/string.html#equalsstr-string-|-undefined-|-null", + "content": "equals(str: string | undefined | null)\n类型:Function\n\n\n功能描述:判断字符串是否相等\n\n\n参数:str - string | undefined | null 与此 String 进行比较的对象\n\n\n返回值:boolean 字符串相等返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \"A\".equals(new String(\"A\")); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = \"A\".equals(\"a\") // false\n }\n});\n\n" + }, + { + "title": "equalsIgnoreCase(str: string | undefined | null)", + "url": "/manual/2.0/string.html#equalsignorecasestr-string-|-undefined-|-null", + "content": "equalsIgnoreCase(str: string | undefined | null)\n类型:Function\n\n\n功能描述:判断字符串是否相等,不考虑大小写\n\n\n参数:str - string | undefined | null 与此 String 进行比较的对象\n\n\n返回值:boolean 字符串相等返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \"A\".equalsIgnoreCase(\"a\"); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"a\").equalsIgnoreCase(\"1\") // false\n }\n});\n\n" + }, + { + "title": "isEmpty()", + "url": "/manual/2.0/string.html#isempty", + "content": "isEmpty()\n类型:Function\n\n\n功能描述:判断是否为空字符串\n\n\n参数:无\n\n\n返回值:boolean 字符串为空,即长度为 0 返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \" \".isEmpty(); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"\").isEmpty() // true\n }\n});\n\n" + }, + { + "title": "isNotEmpty()", + "url": "/manual/2.0/string.html#isnotempty", + "content": "isNotEmpty()\n类型:Function\n\n\n功能描述:判断是否不为空字符串\n\n\n参数:无\n\n\n返回值:boolean 字符串不为空,即长度大于 0 返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \" \".isNotEmpty(); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"\").isNotEmpty() // false\n }\n});\n\n" + }, + { + "title": "isBlank()", + "url": "/manual/2.0/string.html#isblank", + "content": "isBlank()\n类型:Function\n\n\n功能描述:判断是否为空白字符串\n\n\n参数:无\n\n\n返回值:boolean 字符串全为空白字符串(即:空格、回车、Tag 制表位、非打印字符)返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \" \".isBlank(); // true\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"\\t\\n\").isBlank() // true\n }\n});\n\n" + }, + { + "title": "repeat(count: number)", + "url": "/manual/2.0/string.html#repeatcount-number", + "content": "repeat(count: number)\n类型:Function\n\n\n功能描述:重复一个字符串\n\n\n参数:count - number 重复次数\n\n\n返回值:string 重复后的字符串\n\n示例:原生 JavaScript var result = \"A\".repeat(3); // AAA\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"Abc\".repeat(3) // AbcAbcAbc\n }\n});\n\n" + }, + { + "title": "left(length: number)", + "url": "/manual/2.0/string.html#leftlength-number", + "content": "left(length: number)\n类型:Function\n\n\n功能描述:截取字符串左边边指定数目的字符串\n\n\n参数:length - number 截取长度\n\n\n返回值:string 子字符串,length 如果为负数,则返回空字符串\n\n示例:原生 JavaScript var result = \"Abc\".left(1); // A\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"Abc\".left(-1) // \"\"\n }\n});\n\n" + }, + { + "title": "right(length: number)", + "url": "/manual/2.0/string.html#rightlength-number", + "content": "right(length: number)\n类型:Function\n\n\n功能描述:截截取字符串右边指定数目的字符串\n\n\n参数:length - number 截取长度\n\n\n返回值:string 子字符串,length 如果为负数,则返回空字符串\n\n示例:原生 JavaScript var result = \"Abc\".right(1); // c\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"Abc\".right(-1) // \"\"\n }\n});\n\n" + }, + { + "title": "truncation(length: number, truncation: string)", + "url": "/manual/2.0/string.html#truncationlength-number,-truncation-string", + "content": "truncation(length: number, truncation: string)\n类型:Function\n\n\n功能描述:截取字符串,超出部分用 truncation 替代\n\n\n参数:length - number 截取长度\n\n             truncation - string 替换字符串返回值:string 截取后的字符串;实际截取长度:当 length 小于等于 truncation 的长度时为,length;当 length 大于 truncation 的长度时为,length - truncation.length\n示例:原生 JavaScript var result = \"Abc\".truncation(1, \"...\"); // A...\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"Abc\".truncation(6, \"...\") // Abc\n }\n});\n\n" + }, + { + "title": "ltrim()", + "url": "/manual/2.0/string.html#ltrim", + "content": "ltrim()\n类型:Function\n\n\n功能描述:删除字符串开头的空白字符(包括:空格、制表位、换行以及其它非打印字符)\n\n\n参数:无\n\n\n返回值:string 删除了字符串最左边的空白字符的字符串\n\n示例:原生 JavaScript var result = \" Abc\".ltrim(); // \"Abc\"\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new String(\" Abc \").ltrim() // \"Abc \"\n }\n});\n\n" + }, + { + "title": "rtrim()", + "url": "/manual/2.0/string.html#rtrim", + "content": "rtrim()\n类型:Function\n\n\n功能描述:删除字符串结尾的空白字符(包括:空格、制表位、换行以及其它非打印字符)\n\n\n参数:无\n\n\n返回值:string 删除了字符串最右边的空白字符的字符串\n\n示例:原生 JavaScript var result = \" Abc\".rtrim(); // \" Abc\"\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new String(\" Abc \").rtrim() // \" Abc\"\n }\n});\n\n" + }, + { + "title": "startsWith(str: string)", + "url": "/manual/2.0/string.html#startswithstr-string", + "content": "startsWith(str: string)\n类型:Function\n\n\n功能描述:判断字符串是否以给定的字符串开头\n\n\n参数:str - string 搜索的字符串\n\n\n返回值:boolean 字符串是否以给定的字符串开头返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \"Abc\".startsWith(\"a\"); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"aBc\").startsWith(\"a\") // true\n }\n});\n\n" + }, + { + "title": "endsWith(str: string)", + "url": "/manual/2.0/string.html#endswithstr-string", + "content": "endsWith(str: string)\n类型:Function\n\n\n功能描述:判断字符串是否以给定的字符串结尾\n\n\n参数:str - string 搜索的字符串\n\n\n返回值:boolean 字符串是否以给定的字符串结尾返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = \"Abc\".endsWith(\"C\"); // false\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = new String(\"aBc\").endsWith(\"c\") // true\n }\n});\n\n" + }, + { + "title": "lcfirst()", + "url": "/manual/2.0/string.html#lcfirst", + "content": "lcfirst()\n类型:Function\n\n\n功能描述:首字母小写\n\n\n参数:无\n\n\n返回值:string 首字母小写后的字符串\n\n示例:原生 JavaScript var result = \"Abc\".lcfirst(); // \"abc\"\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new String(\"abc\").lcfirst() // \"abc\"\n }\n});\n\n" + }, + { + "title": "ucfirst()", + "url": "/manual/2.0/string.html#ucfirst", + "content": "ucfirst()\n类型:Function\n\n\n功能描述:首字母大写\n\n\n参数:无\n\n\n返回值:string 首字母大写后的字符串\n\n示例:原生 JavaScript var result = \"abc\".ucfirst(); // \"Abc\"\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new String(\"abc\").lcfirst() // \"Abc\"\n }\n});\n\n" + }, + { + "title": "escapeHTML()", + "url": "/manual/2.0/string.html#escapehtml", + "content": "escapeHTML()\n类型:Function\n\n\n功能描述:将 HTML 编码,参考:https://www.w3school.com.cn/html/html_entities.asp\n\n\n参数:无\n\n\n返回值:string 编码后的字符串\n\n示例:原生 JavaScript var result = \"test\".escapeHTML(); // <a href='https://www.domain.com'>test</a>\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = new String(\"test\").lcfirst() // <a href='https://www.domain.com'>test</a>\n }\n});\n\n" + }, + { + "title": "unescapeHTML()", + "url": "/manual/2.0/string.html#unescapehtml", + "content": "unescapeHTML()\n类型:Function\n\n\n功能描述:将 HTML 实体字符解码,参考:https://www.w3school.com.cn/html/html_entities.asp\n\n\n参数:无\n\n\n返回值:string 解码后的字符串\n\n示例:原生 JavaScript var result = \"<a href='https://www.domain.com'>test</a>\".unescapeHTML(); // test\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"<a href='https://www.domain.com'>test</a>\".unescapeHTML() // test\n }\n});\n\n" + }, + { + "title": "stripTag(tag: string)", + "url": "/manual/2.0/string.html#striptagtag-string", + "content": "stripTag(tag: string)\n类型:Function\n\n\n功能描述:删除 HTML 标签\n\n\n参数:tag - string 待删除标签\n\n\n返回值:string 删除标签后的字符串\n\n示例:原生 JavaScript var result = \"test\".stripTag(\"a\"); // test\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"test\".stripTag(\"a\") // test\n }\n});\n\n" + }, + { + "title": "stripTags(tag: string)", + "url": "/manual/2.0/string.html#striptagstag-string", + "content": "stripTags(tag: string)\n类型:Function\n\n\n功能描述:批量删除 HTML 标签\n\n\n参数:tag - string[] | string 删除指定的标签\n\n\n返回值:string 删除标签后的字符串\n\n示例:原生 JavaScript var result = \"testEM\".stripTags([\"a\", \"i\"]); // testEM\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"testEM\".stripTags([\"a\", \"i\"]) // testEM\n }\n});\n\n" + }, + { + "title": "stripScripts()", + "url": "/manual/2.0/string.html#stripscripts", + "content": "stripScripts()\n类型:Function\n\n\n功能描述:删除 script 标签\n\n\n参数:无\n\n\n返回值:string 删除 script 标签后的字符串\n\n示例:原生 JavaScript var result = 'alert(\"test\");test'.stripScripts(); // test\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = 'alert(\"test\");test'.stripScripts() // \n" + }, + { + "title": "toArray(delimiter: string)", + "url": "/manual/2.0/string.html#toarraydelimiter-string", + "content": "toArray(delimiter: string)\n类型:Function\n\n\n功能描述:将字符串转换为数组\n\n\n参数:delimiter - string 分隔字符\n\n\n返回值:string[] 字符串数组\n\n示例:原生 JavaScript var result = \"a|b|c\".toArray('|'); // [ \"a\", \"b\", \"c\" ]\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string[] = \"a|b||c\".toArray('||') // [ \"a|b\", \"c\" ]\n }\n});\n\n" + }, + { + "title": "inspect(useDoubleQuotes: boolean)", + "url": "/manual/2.0/string.html#inspectusedoublequotes-boolean", + "content": "inspect(useDoubleQuotes: boolean)\n类型:Function\n\n\n功能描述:返回一个数组的字符串表示形式\n\n\n参数:useDoubleQuotes - boolean 是否使用双引号引住\n\n\n返回值:string 数组的字符串表示形式\n\n示例:原生 JavaScript var result = \"a|b|c\".inspect(true); // \\\"a|b|c\\\"\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = \"a|b|c\".inspect(false) // 'a|b|c'\n }\n});\n\n" + }, + { + "title": "hashCode()", + "url": "/manual/2.0/string.html#hashcode", + "content": "hashCode()\n类型:Function\n\n\n功能描述:获取字符串 hash code\n\n\n参数:无\n\n\n返回值:number 字符串的 hash code\n\n示例:原生 JavaScript var result = \"abc\".hashCode(); // 96354\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: number = \"abcABC\".hashCode() // 2870546592\n }\n});\n\n" + }, + { + "title": "random(length: number, type?: RandomType = \"NUMERIC\" | \"LETTER\" | \"LETTER_NUMERIC\" | \"CHINESE\" | undefined)", + "url": "/manual/2.0/string.html#randomlength-number,-type?-randomtype-=-\"numeric\"-|-\"letter\"-|-\"letter_numeric\"-|-\"chinese\"-|-undefined", + "content": "random(length: number, type?: RandomType = \"NUMERIC\" | \"LETTER\" | \"LETTER_NUMERIC\" | \"CHINESE\" | undefined)\n类型:Function\n\n\n功能描述:生成随机字符串\n\n\n参数:length - number 生成字符串的长度\n\n             type - NUMERIC | LETTER | LETTER_NUMERIC | CHINESE | undefined 生成类型,可选参数,当未指定时为 LETTER_NUMERIC NUMERIC - 数字随机字符串\n LETTER - 英文随机字符串\n\n LETTER_NUMERIC - 英文数字混合随机字符串\n\n CHINESE - 中文随机字符串\n返回值:string 随机字符串\n示例:原生 JavaScript var result = String.random(6); // 1Diim2\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: string = String.random(6, \"NUMERIC\") // 881773\n }\n});\n\n" + } + ] + }, + { + "title": "Window 参考手册", + "content": "", + "url": "/manual/2.0/window.html", + "children": [ + { + "title": "属性", + "url": "/manual/2.0/window.html#属性", + "content": "属性\n\n属性\n描述\n\n\n\n\nbrowser\n浏览器信息对象\n\n\nlocation\nLocation 对象\n\n\n" + }, + { + "title": "方法", + "url": "/manual/2.0/window.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\ncopy\n将字符串复制到剪贴板\n\n\n" + }, + { + "title": "copy(str: string)", + "url": "/manual/2.0/window.html#copystr-string", + "content": "copy(str: string)\n类型:Function\n\n\n功能描述:将字符串复制到剪贴板\n\n\n参数:str - string 字符串\n\n\n返回值:无\n\n示例:原生 JavaScript window.copy(\"这是要复制的字符串\");\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n window.copy(\"这是要复制的字符串\")\n }\n});\n\n" + }, + { + "title": "Browser", + "url": "/manual/2.0/window.html#browser", + "content": "Browser" + }, + { + "title": "Location", + "url": "/manual/2.0/window.html#location", + "content": "Location" + } + ] + }, + { + "title": "Browser 参考手册", + "content": "", + "url": "/manual/2.0/browser.html", + "children": [ + { + "title": "属性", + "url": "/manual/2.0/browser.html#属性", + "content": "属性\n\n属性\n描述\n\n\n\n\nuserAgent\n获取浏览器 User-Agent\n\n\nname\n获取浏览器应用程序名称\n\n\nisMobile\n是否为移动设备\n\n\nisChrome\n是否为 Chrome 浏览器\n\n\nisFirefox\n是否为 Firefox 浏览器\n\n\nisMozilla\n是否为 Mozilla 浏览器\n\n\nisMSIE\n是否为 IE 浏览器\n\n\nisOpera\n是否为 Opera 浏览器\n\n\nisSafari\n是否为 Safari 浏览器\n\n\nisNetscape\n是否为 Netscape 浏览器\n\n\n" + }, + { + "title": "readonly userAgent", + "url": "/manual/2.0/browser.html#readonly-useragent", + "content": "readonly userAgent\n类型:Property\n\n\n功能描述:获取浏览器 User-Agent,等价于 navigator.userAgent\n\n\n返回值:string 浏览器 User-Agent\n\n示例:原生 JavaScript var result = window.browser.userAgent; // Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: String = window.browser.userAgent // Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0\n }\n});\n\n" + }, + { + "title": "readonly name", + "url": "/manual/2.0/browser.html#readonly-name", + "content": "readonly name\n类型:Property\n\n\n功能描述:获取浏览器应用程序名称,等价于 navigator.appName\n\n\n返回值:string 浏览器应用程序名称\n\n示例:原生 JavaScript var result = window.browser.name; // Netscape\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: String = window.browser.name // Netscape\n }\n});\n\n" + }, + { + "title": "readonly isMobile", + "url": "/manual/2.0/browser.html#readonly-ismobile", + "content": "readonly isMobile\n类型:Property\n\n\n功能描述:是否为移动设备,检测依据:User-Agent 中含有 Android、iPhone、iPod、Windows Phone、Mobile、Coolpad、mmp、SmartPhone、midp、wap、xoom、Symbian、J2ME、Blackberry、Wince 其中任意一个字符串\n\n\n返回值:boolean 是移动设备返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isMobile\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isMobile\n }\n});\n\n" + }, + { + "title": "readonly isChrome", + "url": "/manual/2.0/browser.html#readonly-ischrome", + "content": "readonly isChrome\n类型:Property\n\n\n功能描述:是否为 Chrome 浏览器\n\n\n返回值:boolean 是 Chrome 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isChrome;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isChrome\n }\n});\n\n" + }, + { + "title": "readonly isFirefox", + "url": "/manual/2.0/browser.html#readonly-isfirefox", + "content": "readonly isFirefox\n类型:Property\n\n\n功能描述:是否为 Firefox 浏览器\n\n\n返回值:boolean 是 Firefox 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isFirefox;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isFirefox\n }\n});\n\n" + }, + { + "title": "readonly isMSIE", + "url": "/manual/2.0/browser.html#readonly-ismsie", + "content": "readonly isMSIE\n类型:Property\n\n\n功能描述:是否为 IE 浏览器\n\n\n返回值:boolean 是 IE 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isMSIE;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isMSIE\n }\n});\n\n" + }, + { + "title": "readonly isOpera", + "url": "/manual/2.0/browser.html#readonly-isopera", + "content": "readonly isOpera\n类型:Property\n\n\n功能描述:是否为 Opera 浏览器\n\n\n返回值:boolean 是 Opera 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isOpera;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isOpera\n }\n});\n\n" + }, + { + "title": "readonly isSafari", + "url": "/manual/2.0/browser.html#readonly-issafari", + "content": "readonly isSafari\n类型:Property\n\n\n功能描述:是否为 Safari 浏览器\n\n\n返回值:boolean 是 Safari 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isSafari;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isSafari\n }\n});\n\n" + }, + { + "title": "readonly isNetscape", + "url": "/manual/2.0/browser.html#readonly-isnetscape", + "content": "readonly isNetscape\n类型:Property\n\n\n功能描述:是否为 Netscape 浏览器\n\n\n返回值:boolean 是 Netscape 浏览器返回 true;否则,返回 false\n\n示例:原生 JavaScript var result = window.browser.isNetscape;\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: boolean = window.browser.isNetscape\n }\n});\n\n" + } + ] + }, + { + "title": "Location 参考手册", + "content": "", + "url": "/manual/2.0/location.html", + "children": [ + { + "title": "方法", + "url": "/manual/2.0/location.html#方法", + "content": "方法\n\n方法\n描述\n\n\n\n\ngetParameters\n获取所有的请求参数及值\n\n\ngetParameter\n获取指定请求参数的值\n\n\n" + }, + { + "title": "getParameters()", + "url": "/manual/2.0/location.html#getparameters", + "content": "getParameters()\n类型:Function\n\n\n功能描述:获取所有的请求参数及值\n\n\n参数:无\n\n\n返回值:Record 当前请求 URL 中的所有的请求参数及值\n\n示例:原生 JavaScript var result = location.getParameters();\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: Record = location.getParameters()\n }\n});\n\n" + }, + { + "title": "getParameter(name: string)", + "url": "/manual/2.0/location.html#getparametername-string", + "content": "getParameter(name: string)\n类型:Function\n\n\n功能描述:获取指定请求参数的值\n\n\n参数:string 参数名称\n\n\n返回值:any 请求参数的值\n\n示例:原生 JavaScript var result = location.getParameter(\"action\");\n\nvue \n \n\n\n\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n setup() {\n const result: any = location.getParameter('action');\n }\n});\n\n" + } + ] + } + ] +} \ No newline at end of file diff --git a/support.html b/support.html new file mode 100644 index 0000000..6de45b6 --- /dev/null +++ b/support.html @@ -0,0 +1,16 @@ +技术支持
\ No newline at end of file diff --git a/ydoc/images/android-chrome-192x192.png b/ydoc/images/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..aede5e3fe32ab15897e39380358d5e7342296b2f GIT binary patch literal 11657 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 + + + + + #da532c + + + diff --git a/ydoc/images/dog@1x.png b/ydoc/images/dog@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..0eb0f99ee035974822d325d8eafb3b22facdc6d8 GIT binary patch literal 2368 zcmV-G3BUGPx-`bk7VR9Fd>S8Hrl#}S@A=NR8>*H8Qi5O9r&A%J7RA&9C30#O7%mW3UVs*v2oepZA`# zoo~Pg8IjhT&pEs?+ zdgCA`3YV{3p(Te)c`}+E1W@aXJcXv~6ZmuFM{4E$Ir3kq^suO1B@0HuwcngF> z>yED!^@^H*6w#c&$S^2ogKF@*T/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 literal 0 HcmV?d00001 diff --git a/ydoc/images/dogbg@2x.png b/ydoc/images/dogbg@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7c7a0d491c025e31304fef0c7a618131699ec54b GIT binary patch literal 93633 zcmc$`Rajijx;5HBLmGE?cM0y0;O_43?gS^edlG_caCg_>?(Xic`8#WWXYak%f9}r3 zx#-zXPpMh+tyxv$9b;5SD9TG9!r{RI002ZONl|4000syEKtzLJz+2;mrxNf12p46E z&wz??f+GMx7$7D3N!1hL)c3x@S-gj z7-WTv29PV#Lgo$KHjDE&xwC%`>BWH%4?r~p{>N7!j6?toaA0uIqneF{go~T%XFDB9 zmHiuxLMj_D7{cr>f*w-6CSYkNn_&c(zD~9m)D#PV%cd6MBgV!6;hBv}M;RW`vl)*Y zMF(V|u-HJim?YG+XHW^5eRccA1iAd9;TLVw#xH7y#x~V%$r)8|eqsV7xBa!{OCJ&f zZ9KcC^m9+vr*2J(>sn?0Cvut)d8h%UZUR7Xhhsr>hP;u60$5Iwk z)@CLz20SK7vL3N)LH(~9*ZKBwO6AP--Gg*nBUbpJ!0r{!yH$Rl2PO5Id^^&zN%&wx zZ}0Ta{?A!jO_}l+jiq57e}wQ9-ew}-WorQ_IGRG&sI5zNDuBC?1;$Q7!qa^PnTa)0 zMm)r0`y&M1(g{3FmZ`IDiR-I(HGwp1E1K~#lt@=?Z+AAx4zaE>k`=XYkNl67gBav~ z_H(b^g5ovNw?uOJLih^#O&1QpSmIvMPE2N>1ji@~enG!oOENFL`rD3^3W=7}-*`mp zZM|~H{F6BfdCYD0Pb0p-2+?QPa;C+APW2OuMr2f!5WUhLO5Zp;&>mtM?Yw<|-R{AC z7d&gZBcC|w{e7XHvv5OOkd@w4EoXSEE&#`d*TV+qBEug_bpfahGE!u8kY!mbyi0TW z@MG`YnSCz2sQyz%Mn>UNNhlISo;(T;&az{kPDyG>${k0Oj$ga1E2e`Ry^yxxD~HvT zr7#y91)Wc`WgtE#OKBeeNvOEK_R2zSDK7tWkG1##h3=u`8ZmYGeqUc-1tB3Jb4ubE z@h4hWJPIVn9$Wv7Ve{c}Mi0An8}pS>HUSyrtQav7MsqC!BEJ$l)|csIny==r7_m~n za^uP{+B3MdQn$Yuoi`+jD?}yam3Hq4JUeb3#0is3ZBAh8d#hR5jHNuCYc}nEAtqRU z4Ce5q7qr4eV-|v(p0lFQo+Bpy3_~2WB|Vd9X!*UWwF5OfNW0>aZ!BklI8dei_Gna) ziimKUd@jI``Q;R-(HvKr>_flCct(#amv4U_8>%oBs^yj>XLL`hx!3LL7TNWtL!{=& zyQX7PAXtxK?l13}8&swcc0SJO`|Z0yRwmcnH_|zhEvVjf`3;+ei~`C0k!e}iU)n3o z@i;MPIh`BUYC^u==SW&&74k>Pw)@_VYDGpGr+mM)_gb&s84L5>1$kTbs8w=WK=!b% z0qlv`r6LA8PPf}NzV3FJP&Gag^A5Y5KRj4+OVe102usqq_JkEaTC0pZx^=aXzz$W@ zi5#kSWq%!{+dyL&7I%_S#L9i9Kv_fJ3$Zlx+|7L+wKLPckx<0->yVAX-KK3_BN+}) zRO>h&LGUWWz#kxj(uKbtiPK)C`Vf3kL*Lq5Z|Bi!^>aFnHT4LpVn5C<$U65dh~aoY z8IQ7gZ~RMgK@@V08G=R$)(S9%?Dvr!sp2tIHgez52NGM5&M-UZ;|dV*n(V{8gJ*Xv zp`z-cPS6J~5XR4#kVt@=)G30{Hu*Pn%{A_}Ex?xhbshNv(jV!^<23Q)#B>MPDwd-S zceGUFVW)M{fbYvj0v<}GE4WBvjdVgZi9^ze9?BvzE|)9<@@8+h5EN)CU*LOG=`hjl zD>EZRuZ=4``L?3=08i36s?XKc)fv+LUvR16+TuSt4*K#b$9$KSKcnv%7P#Xdo>Ex~ z-%(UxYmv6LWy{1k$24dkeU&K^6Pr5BwFoEq{!^1TO-cN&&)lzwQBplY(8g7z`8xq~ zPkqbG0Q~jNf_P1xllGFHo?fNp+nnnOqKTQi_8cXe)@`zzfT_%hUqF~Nc6=~3O-
ByDJGI|3O>S(P_sDpCH*3{33iHb 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
&=7J-<-@U41ZzfHb;s6ASl8=xt19 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Ø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 a^cY@=3zmFxGMx&vg2B_(&t;ucLK6Vo`>p!` literal 0 HcmV?d00001 diff --git a/ydoc/images/favicon-32x32.png b/ydoc/images/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..5dec63271b9ec5fcce80a7cf4556a7c811a69b92 GIT binary patch literal 1784 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 literal 0 HcmV?d00001 diff --git a/ydoc/images/logo.png b/ydoc/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..caca95f51fb0efccea29b16a3f127799499a097b GIT binary patch literal 23290 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 literal 0 HcmV?d00001 diff --git a/ydoc/images/manifest.json b/ydoc/images/manifest.json new file mode 100644 index 0000000..b20abb7 --- /dev/null +++ b/ydoc/images/manifest.json @@ -0,0 +1,19 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/ydoc/images/mstile-150x150.png b/ydoc/images/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..87b99606766040e8367542c56046440a51d888b2 GIT binary patch literal 8361 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 literal 0 HcmV?d00001 diff --git a/ydoc/images/safari-pinned-tab.svg b/ydoc/images/safari-pinned-tab.svg new file mode 100644 index 0000000..fed47b7 --- /dev/null +++ b/ydoc/images/safari-pinned-tab.svg @@ -0,0 +1,70 @@ + + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + + + + + + + + + diff --git a/ydoc/scripts/app.js b/ydoc/scripts/app.js new file mode 100644 index 0000000..e1e4fa1 --- /dev/null +++ b/ydoc/scripts/app.js @@ -0,0 +1,87 @@ +var $panel = document.getElementById('js-panel'), + $header = document.getElementById('js-header'), + $content = document.getElementById('js-content'), + $navIcon = document.getElementById('js-nav-btn'), + $summaryItems = Array.prototype.slice.call(document.querySelectorAll('#js-menu .href')), + $menu = document.getElementById('js-menu'), + $menuContent = document.getElementById('js-menu-content'), + $menuBar = document.getElementById('js-summary-switch'), + navigation; + +var utils = { + debounce: function(func, wait) { + var timeout; + return function () { + clearTimeout(timeout); + timeout = setTimeout(func, wait); + }; + } +}; + +// Add 'active' to summary item +function itemAddActive() { + var locationHref = window.location.href; + $summaryItems.map(function (item, index) { + if (item.href === locationHref) { + // add 'active' for present summary item. + item.parentElement.classList.add('active'); + } else { + item.parentElement.classList.remove('active'); + } + }); +} + +// Add EventListener +function addEvents() { + $panel.addEventListener('click', function (e) { + itemAddActive(); + if (e.target.scrollTop > 0) { + $header.classList.add('moved'); + } else { + $header.classList.remove('moved'); + } + }); + if ($menuContent) { + $menuContent.addEventListener('click', function (e) { + $menu.classList.remove('active'); + setTimeout(itemAddActive, 0); + }); + } + if ($menuBar) { + $menuBar.addEventListener('click', function () { + $menu.classList.toggle('active'); + // 侧栏菜单点击时收起 nav 导航 + if ($navIcon.classList.value.indexOf('active') !== -1) { + navigation.toggle(); + } + }); + } + if ($menu) { + $menu.addEventListener('scroll', function(e) { + sessionStorage.setItem('menuScrollTop', e.target.scrollTop); + }); + } + if ($content) { + $content.addEventListener('scroll', function (e) { + sessionStorage.setItem('contentScrollTop', e.target.scrollTop); + }); + } +} + +// initial components +function initComponents() { + // nav + navigation = responsiveNav('.js-nav', { + customToggle: '#js-nav-btn', + open: function() { + if ($menu) $menu.classList.remove('active'); + setTimeout(itemAddActive, 0); + } + }); +} + + +initComponents(); +addEvents(); +itemAddActive(); + diff --git a/ydoc/scripts/plugins/dollar.min.js b/ydoc/scripts/plugins/dollar.min.js new file mode 100644 index 0000000..9edc48c --- /dev/null +++ b/ydoc/scripts/plugins/dollar.min.js @@ -0,0 +1,6 @@ +/*! + * DollarJS 2.0.0 -- a light, fast, modular, jQuery replacement + * Github: https://github.com/seebigs/dollar-js + * Released under the MIT license: https://opensource.org/licenses/MIT + */ +(function () { function t() { var t, n, e, i = M(); return B.each(W.call(arguments), function (r) { if (r) for (t = 0, n = r.length; t < n; t++)e = r[t], -1 === i.indexOf(e) && i.push(e) }), i } function n(t, n) { if (n) { var e = u(n), i = []; return B.each(e, function (n) { B.each(t, function (t) { typeof n.contains === $ && n.contains(t) && i.push(t) }) }), i } return t } function e(t, e) { function r() { var t = R.readyState; return "interactive" === t || "complete" === t } if (typeof t === H) return i(t, e); if (t.isDollar) return n(t.get(), e); if (t.nodeType) return n([t], e); if (t === t.window) return [t]; if (t.length) { for (var o, f = [], s = 0, u = t.length; s < u; s++)o = t[s], B.isElement(o) && f.push(o); return n(f, e) } return typeof t === $ && (r() ? t() : I.addEventListener ? R.addEventListener("DOMContentLoaded", t, !1) : R.attachEvent("onreadystatechange", function () { r() && t() })), [] } function i(t, n) { if (n) { var e = []; if (n = u(n), n.length > 1) { for (var r = 0, o = n.length; r < o; r++)B.merge(e, i(t, n[r])); return e } n = n[0] } else n = U; if (!n) return []; var f = /^\s*(?:#([\w-]+)|(\w+)|\.([\w-]+)|(<[\w\W]+>)[^>]*)\s*$/.exec(t); if (f) { if (t = f[1]) { var a = R.getElementById(t); return a && n !== a && n.contains(a) ? [a] : [] } if (t = f[2]) return n.getElementsByTagName(t); if (t = f[3]) return n.getElementsByClassName(t); if (t = f[4]) return [s(t)] } else { var l = /(.*)\:(.+)/.exec(t); if (l) { var c = l[1] || "*", h = l[2].split("("), p = _[h[0]]; if (p) return p(c, n, h) } } return W.call(n.querySelectorAll(t)) } function r(t) { var n = i(t); return -1 !== P.indexOf.call(n, this) } function o(t, n, e) { return !(!n || !t || 1 !== t.nodeType) && (typeof n !== H ? n.nodeType ? t === n : typeof n === $ ? !!n.call(t, t, e) : !!n.length && -1 !== n.indexOf(t) : G.call(t, n)) } function f(t, n) { for (var e = [], i = 0, r = t.length; i < r; i++)o(t[i], n, i) && e.push(t[i]); return e } function s(t) { var n = /^<(\w+)\s*\/?>(?:<\/\1>|)$/.exec(t); if (n) return R.createElement(n[1]); var e = R.createElement("div"); return e.innerHTML = t, e.childNodes[0] } function u(t) { return typeof t === H ? i(t) : t.isDollar ? t.get() : 1 === t.nodeType || 9 === t.nodeType ? [t] : Array.isArray(t) ? t : [U] } function a(t) { var n = t && t.nodeType; return n && 3 !== n && 8 !== n && 2 !== n } function l(t) { return 9 === t.nodeType && (t = t.documentElement), a(t) ? t : q } function c(t, n) { if (t) return t === t.window ? t[n] : (t = l(t), t && t.hasAttribute(n) ? t.getAttribute(n) : q) } function h(t, n, e) { return t === t.window && (t[n] = e), (t = l(t)) && t.setAttribute(n, e) } function p(t, n) { return t === t.window && (t[n] = q), (t = l(t)) && t.removeAttribute(n) } function d(t) { return Number(c(t, J)) || q } function v(t, n) { return h(t, J, n) } function y(t, n, e) { var i = d(n); if (i) return e ? t[i] && t[i][e] : t[i] } function m(t, n, e, i) { var r = d(n); r || (r = K, v(n, r), K++), t[r] || (t[r] = {}), t[r][e] = i } function g(t, n, e, i) { var r = y(t, n, e) || []; r.push(i), m(t, n, e, r) } function b(t, n, e) { var i = n + " " + C(e), r = t.style.transition ? t.style.transition.split(/,\s?/) : [], o = !1; return r.forEach(function (t, e) { 0 === t.indexOf(n + " ") && (r[e] = i, o = !0) }), o || r.push(i), r.join(", ") } function E(t, n) { var e = t.style.transition.split(/,\s?/), i = []; return e.forEach(function (t) { 0 !== t.indexOf(n + " ") && i.push(t) }), i.join(", ") } function C(t) { var n = []; return n.push(typeof t.duration === H ? t.duration : (parseInt(t.duration) || 400) + "ms"), n.push(t.easing || "ease"), n.push(typeof t.delay === H ? t.delay : (parseInt(t.delay) || 0) + "ms"), n.join(" ") } function T(t, n) { function e(t) { u.appendChild(t), o = !0 } t = [].concat.apply([], t); var i, r, o, f, u, a, l = t.length, c = this.length; for (r = 0; r < c; r++) { for (o = !1, u = R.createDocumentFragment(), i = 0; i < l; i++)(f = t[i]) && (typeof f === H ? (a = s(f)) && e(a) : 1 === f.nodeType ? e(f) : f.isDollar ? f.each(e) : typeof f === $ && (a = f(this[r], r), typeof a === H && (a = s(a)), a && e(a))); o && n(this[r], u) } return this } function w(t) { return t && t.dataset || function () { var n, e = {}, i = t.attributes, r = /^data-[a-z_\-\d]*$/i; for (var o in i) i.hasOwnProperty(o) && (n = i[o].name, r.test(n) && (n = B.format.dashToCamel(n.substr(5)), e[n] = i[o].value)); return e }() } function N(t, n) { return a(t) ? t[n] : q } function x(t, n) { return t && typeof n === H ? t.ownerDocument.defaultView.opener ? t.ownerDocument.defaultView.getComputedStyle(t, null)[n] || "" : k.getComputedStyle(t, null)[n] || t.style[n] || "" : "" } function O(t, n) { var e; return n = typeof n === H ? n : "", t ? (e = "float" === n ? "styleFloat" : B.format.dashToCamel(n.replace(/^-ms-/, "ms-")), t.currentStyle[e]) : "" } function S(t) { var n = t.style.display; if (n && "none" !== n || (n = y(X, t, "nonHiddenDisplayValue") || ""), !n && t.parentNode) { var e = R.createElement(t.nodeName); t.parentNode.appendChild(e), n = Y(e, "display"), t.parentNode.removeChild(e), m(X, t, "nonHiddenDisplayValue", n) } return n } function A(t, n) { if (typeof t !== H || typeof n !== $) return this; t = t.split(" "); var e, i, r; return this.each(function () { for (e = this.addEventListener || this.attachEvent, i = 0, r = t.length; i < r; i++)e.call(this, t[i], n, !1), g(X, this, tt, n) }), this } function D(t, n) { if (typeof t !== H) return this; t = t.split(" "); var e, i, r, o, f; return this.each(function () { for (e = 0, i = t.length; e < i; e++)for (r = typeof n === $ ? [n] : y(X, this, tt) || [], o = 0, f = r.length; o < f; o++)this.removeEventListener ? this.removeEventListener(t[e], r[o], !1) : this.detachEvent(t[e], r[o], !1) }), this } function j(t, n, e) { var i, r = { bubbles: !0, cancelable: !0 }; e && e.length && (r.detail = e), B.each(n, function (n) { B.each(t, function (t) { "click" === n ? t.click() : "focus" === n ? t.focus() : "blur" === n ? t.blur() : (i = new k.CustomEvent(n, r), t.dispatchEvent(i)) }) }) } function L(t, n) { return typeof n === $ ? A.call(this, t, n) : (j(this, t.split(" ")), this) } var q, B, M = function (t, n) { return new M.fn.init(t, n) }, H = "string", $ = "function", k = window, I = k.Element.prototype, z = Object.prototype, V = z.toString, F = z.hasOwnProperty, P = Array.prototype, W = P.slice, R = document, U = document.documentElement, Z = /[\s\t\r\n\f]+/g; M.isDollar = !0, M.fn = { isDollar: !0, indexOf: P.indexOf, push: P.push, pop: P.pop, shift: P.shift, unshift: P.unshift, slice: P.slice, splice: P.splice }, M.fn.init = function (t, n) { if (this.length = 0, !t) return this; if (!n) { if (/^#[\w-]+$/.test(t)) { var i = R.getElementById(t.substr(1)); return i && (this[0] = i, this.length = 1), this } if (/^[a-z]+$/.test(t)) { for (var r = R.getElementsByTagName(t), o = r.length, f = 0; f < o; f++)this[f] = r[f]; return this.length = o, this } } return B.merge(this, e(t, n)) }, M.fn.init.prototype = M.fn; var _ = { contains: function (t, n, e) { var r = e[1] && e[1].replace(/[\"\'\)]/g, ""); return r ? f(i(t, n), function (t) { return -1 !== (t.textContent || t.innerText).indexOf(r) }) : [] }, hidden: function (t, n) { return f(i(t, n), function (t) { return 1 === t.nodeType && !(t.offsetWidth || t.offsetHeight || t.getClientRects().length) }) }, visible: function (t, n) { return f(i(t, n), function (t) { return 1 === t.nodeType && !!(t.offsetWidth || t.offsetHeight || t.getClientRects().length) }) }, even: function (t, n) { return W.call(n.querySelectorAll(t + ":nth-child(even)")) }, odd: function (t, n) { return W.call(n.querySelectorAll(t + ":nth-child(odd)")) }, has: function (t, n, i) { var r = typeof i[1] === H && i[1].replace(")", ""); return r ? f(e(t, n), function (t) { return 1 === t.nodeType && !!e(r, t).length }) : [] }, not: function (t, n, e) { n === U && (n = R); var r = t; "*" !== t && " " === t[t.length - 1] && (r = t + "*"); var o = e[1].split(")"), f = o[1], s = (o[0] || "").split(","); f && (r += f); var u = [], a = i(r, n); return B.each(a, function (t) { var n = !0; B.each(s, function (e) { if (G.call(t, e)) return n = !1, !1 }), n && u.push(t) }), u } }, G = I.matches || I.webkitMatchesSelector || I.mozMatchesSelector || I.msMatchesSelector || I.oMatchesSelector || r, J = "dollar-node-id", K = 1, Q = {}, X = {}; M.utils = B = function () { function t(t) { return !!t && (1 === t.nodeType || 9 === t.nodeType) } function n(t) { return V.call(t) === o + "Object]" } function e(t, n) { if (t) if (t.length !== q) { for (var e = 0, i = t.length; e < i; e++)if (!1 === n.call(t[e], t[e], e, t)) return } else for (var r in t) if (F.call(t, r) && !1 === n.call(t[r], t[r], r, t)) return } function i() { var t = arguments[0], n = function (n, e) { n !== q && (t[e] = n) }; return e(W.call(arguments, 1), function (t) { e(t, n) }), t } function r() { var t, n, i = arguments[0]; return e(W.call(arguments, 1), function (e) { if (e) for (t = 0, n = e.length; t < n; t++)-1 === i.indexOf(e[t]) && i.push(e[t]) }), i } var o = "[object "; return { isElement: t, isObject: n, each: e, extend: i, merge: r, format: { camelToDash: function (t) { return t.replace(/([A-Z])/g, "-$1").toLowerCase() }, dashToCamel: function (t) { return t.replace(/\-(.)/g, function (t, n) { return n.charAt(0).toUpperCase() }) } } } }(), M.fn.closest = function (n, i) { if (!n) return M(); for (var r, o = e(n, i), f = [], s = 0, u = this.length; s < u; s++)for (r = this[s]; r && r !== i;) { if (-1 !== P.indexOf.call(o, r)) { f.push(r); break } r = r.parentNode } return t(f) }, M.fn.each = M.fn.forEach = function (t) { return B.each(this, t), this }, M.fn.eq = function (t) { return t = Array.isArray(t) ? NaN : parseInt(t, 10), M(t >= 0 ? this[t] : this[this.length + t]) }, M.fn.filter = function (n) { return this.length && n ? t(f(this, n)) : M() }, M.fn.find = function (n) { return n && this.length ? t(e(n, this)) : M() }, M.fn.get = function (t) { return t === q ? W.call(this, 0) : t < 0 ? this[t + this.length] : this[t] }, M.fn.reverse = P.reverse, M.fn.animate = function (t, n, e) { B.isObject(n) || (n = { duration: n }); var i = "transitionend"; return this.each(function (r, o) { B.each(t, function (t, f) { r.style.transition = b(r, f, n), r.style[f] = t; var s = function (t) { r.removeEventListener(i, s, !0), r.style.transition = E(r, t), typeof e === $ && e.call(r, r, o) }; r.addEventListener(i, s, !0) }) }), this }, M.fn.fadeIn = function (t, n) { return this.animate({ opacity: 1 }, t, n) }, M.fn.fadeOut = function (t, n) { return this.animate({ opacity: 0 }, t, n) }, M.fn.add = function (n, e) { return n ? t(this, M(n, e)) : this }, M.fn.concat = function () { var n = W.call(arguments); return n.unshift(this), t.apply(this, n) }, M.fn.has = function (t) { return t ? this.filter(function () { return !!e(t, this).length }) : M() }, M.fn.is = function (t) { return !(!t || !this.filter(t).length) }, M.fn.map = function (n) { if (typeof n !== $) return this; for (var e, i = [], r = 0, o = this.length; r < o; r++) { if (e = n.call(this[r], this[r], r, this), !B.isElement(e)) throw new Error(".map fn should return an Element, not " + typeof e); i.push(e) } return t.call(this, i) }, M.fn.not = function (n) { if (!n) return this; var e; return e = typeof n === $ ? function (t, e) { return !n.call(t, e, t) } : function (t, e) { return !o(t, n, e) }, t(this.filter(e)) }, M.fn.after = function () { return T.call(this, arguments, function (t, n) { var e = t.parentNode; e && (t.nextSibling ? e.insertBefore(n, t.nextSibling) : e.appendChild(n)) }) }, M.fn.append = function () { return T.call(this, arguments, function (t, n) { t.appendChild(n) }) }, M.fn.before = function () { return T.call(this, arguments, function (t, n) { t.parentNode && t.parentNode.insertBefore(n, t) }) }, M.fn.clone = function () { var t, n, e = this.length; for (n = 0; n < e; n++)t = this[n], 1 !== t.nodeType && 11 !== t.nodeType || (this[n] = t.cloneNode(!0)); return this }, M.fn.empty = function () { var t, n, e = this.length; for (n = 0; n < e; n++)t = this[n], 1 === t.nodeType && (t.textContent = ""); return this }, M.fn.html = function (t) { var n, e, i = this.length, r = this[0]; if (t === q) return r && 1 === r.nodeType ? r.innerHTML : q; try { for (e = 0; e < i; e++)n = this[e], 1 === n.nodeType && (n.innerHTML = t) } catch (n) { this.empty().append(t) } return this }, M.fn.prepend = function () { return T.call(this, arguments, function (t, n) { t.firstChild ? t.insertBefore(n, t.firstChild) : t.appendChild(n) }) }, M.fn.remove = function (t) { var n, e, i = this.length; if (t === q) for (e = 0; e < i; e++)n = this[e], n.parentNode && n.parentNode.removeChild(n); else for (e = 0; e < i; e++)n = this[e], o(n, t, e) && n.parentNode && n.parentNode.removeChild(n); return this }, M.fn.attr = function (t, n) { return n === q ? c(this[0], t) : (this.each(function (e, i) { a(e) && (typeof n === $ && (n = n(c(e, t), i)), e.setAttribute(t, n)) }), this) }, M.fn.data = function (t, n) { function e(t, n) { m(Q, i, n, t) } if (!this.length) return q; var i, r = {}; if (!t) return B.extend({}, w(this[0]), y(Q, this[0])); if (typeof t === H) { if (n === q) { var o = y(Q, this[0], t); return o === q ? w(this[0])[t] : o } r[t] = n } else B.isObject(t) && (r = t); for (var f = 0, s = this.length; f < s; f++)i = this[f], B.each(r, e); return this }, M.fn.prop = function (t, n) { return n === q ? N(this[0], t) : (this.each(function (e, i) { a(e) && (typeof n === $ && (n = n(N(e, t), i)), e[t] = n) }), this) }, M.fn.removeAttr = function (t) { return this.each(function () { this.removeAttribute(t) }), this }, M.fn.removeData = function (t) { for (var n, e, i = 0, r = this.length; i < r; i++)n = this[i], e = d(n), t ? (e && delete Q[e][t], n && (n.dataset ? n.dataset[t] && delete n.dataset[t] : p(n, "data-" + B.format.camelToDash(t)))) : Q[e] = {}; return this }, M.fn.removeProp = function (t) { return this.each(function () { a(this) && delete this[t] }), this }, M.fn.text = function (t) { if (t !== q) return this.each(function (n, e) { 1 !== n.nodeType && 11 !== n.nodeType && 9 !== n.nodeType || (n.textContent = typeof t === $ ? t(n.textContent, e) : t) }), this; var n = ""; return this.each(function (t) { var e = t.nodeType; 1 === e || 9 === e || 11 === e ? typeof t.textContent === H && (n += t.textContent) : 3 !== e && 4 !== e || (n += t.nodeValue) }), n }, M.fn.val = function (t) { if (t === q) return this[0] ? this[0].value : q; for (var n = 0; n < this.length && 1 === this[n].nodeType; n++)typeof t === $ && (t = t.call(this[n], this[n].value, n)), this[n].value = t; return this }; var Y = k.getComputedStyle !== q ? x : O; M.fn.addClass = function (t) { if (!t) return this; var n, e, i, r = this.length; if (typeof t === H) for (n = t.trim().split(" "), i = 0; i < r; i++)e = this[i].className.trim().replace(Z, " ").split(" "), this[i].className = B.merge([], e, n).join(" "); else if (typeof t === $) for (i = 0; i < r; i++)n = t.call(this[i], this[i].className, i).split(" "), e = this[i].className.trim().replace(Z, " ").split(" "), this[i].className = B.merge([], e, n).join(" "); return this }, M.fn.css = function (t, n) { function e(t, n) { r.style[n] = typeof t === $ ? t.call(r, Y(r, n), i) : t } if (!t) return this; var i, r, o = this.length, f = {}; if (typeof t === H) { if (n === q) return Y(this[0], t); f[t] = n } else B.isObject(t) && (f = t); for (i = 0; i < o; i++)r = this[i], B.each(f, e); return this }, M.fn.hasClass = function (t) { if (!t) return !1; t = " " + t.trim() + " "; for (var n = 0, e = this.length; n < e; n++)if (1 === this[n].nodeType && -1 !== (" " + this[n].className + " ").replace(Z, " ").indexOf(t)) return !0; return !1 }, M.fn.height = function () { return parseFloat(this.eq(0).css("height")) || 0 }, M.fn.hide = function () { return this.each(function () { this.style.display = "none" }), this }, M.fn.removeClass = function (t) { function n(t) { -1 === o.indexOf(t) && i.push(t) } for (var e, i, r, o, f = 0, s = this.length; f < s; f++)e = this[f], i = [], t ? (o = typeof t === $ ? t.call(e, e.className, f) : t, o.length && (o = typeof o === H ? o.trim().split(" ") : o, r = e.className.replace(Z, " ").split(" "), B.each(r, n), e.className = i.join(" "))) : e.className = ""; return this }, M.fn.show = function () { return this.each(function () { this.style.display = S(this), this.style.visibility = "visible", this.style.opacity = 1 }), this }, M.fn.width = function () { return parseFloat(this.eq(0).css("width")) || 0 }, M.fn.children = function (n) { for (var e = [], i = 0, r = this.length; i < r; i++)B.merge(e, this[i].children); return t(n ? M.fn.filter.call(e, n) : e) }, M.fn.first = function () { return this.eq(0) }, M.fn.last = function () { return this.eq(-1) }, M.fn.next = function (n) { for (var e, i = [], r = 0, o = this.length; r < o; r++)(e = this[r].nextElementSibling) && i.push(e); return t(n ? M.fn.filter.call(i, n) : i) }, M.fn.parent = function (n) { for (var e, i = [], r = 0, o = this.length; r < o; r++)(e = this[r].parentNode) && i.push(e); return t(n ? M.fn.filter.call(i, n) : i) }, M.fn.prev = function (n) { for (var e, i = [], r = 0, o = this.length; r < o; r++)(e = this[r].previousElementSibling) && i.push(e); return t(n ? M.fn.filter.call(i, n) : i) }, M.fn.siblings = function (n) { for (var e, i = [], r = 0, o = this.length; r < o; r++)for (this[r].parentNode && (e = this[r].parentNode.firstChild); e;)e !== this[r] && 1 === e.nodeType && i.push(e), e = e.nextSibling; return t(n ? M.fn.filter.call(i, n) : i) }; var tt = "activeEventListeners"; M.fn.click = function (t) { return L.call(this, "click", t) }, M.fn.focus = function (t) { return L.call(this, "focus", t) }, M.fn.blur = function (t) { return L.call(this, "blur", t) }, M.fn.change = function (t) { return L.call(this, "change", t) }, M.fn.resize = function (t) { return L.call(this, "resize", t) }, M.fn.off = M.fn.unbind = D, M.fn.on = M.fn.bind = A, M.fn.trigger = function (t) { return typeof t !== H ? this : (t = t.split(" "), j(this, t, W.call(arguments, 1)), this) }, function (t) { function n(t, n) { n = n || { bubbles: !1, cancelable: !1 }; var e = document.createEvent("CustomEvent"); return e.initCustomEvent(t, n.bubbles, n.cancelable, n.detail), e } typeof t.CustomEvent !== $ && (n.prototype = t.Event.prototype, t.CustomEvent = n) }(k), function () { var t = window; "undefined" != typeof module && module.exports ? module.exports = M : typeof t.define === $ && t.define.amd ? t.define(function () { return M }) : t.$ = M }.call(this) }).call(this); \ No newline at end of file diff --git a/ydoc/scripts/plugins/responsive-nav.min.js b/ydoc/scripts/plugins/responsive-nav.min.js new file mode 100644 index 0000000..add03c1 --- /dev/null +++ b/ydoc/scripts/plugins/responsive-nav.min.js @@ -0,0 +1 @@ +!function (a, b, c) { "use strict"; var d = function (d, e) { var f = !!b.getComputedStyle; f || (b.getComputedStyle = function (a) { return this.el = a, this.getPropertyValue = function (b) { var c = /(\-([a-z]){1})/g; return "float" === b && (b = "styleFloat"), c.test(b) && (b = b.replace(c, function () { return arguments[2].toUpperCase() })), a.currentStyle[b] ? a.currentStyle[b] : null }, this }); var g, h, i, j, k, l, m = function (a, b, c, d) { if ("addEventListener" in a) try { a.addEventListener(b, c, d) } catch (e) { if ("object" != typeof c || !c.handleEvent) throw e; a.addEventListener(b, function (a) { c.handleEvent.call(c, a) }, d) } else "attachEvent" in a && ("object" == typeof c && c.handleEvent ? a.attachEvent("on" + b, function () { c.handleEvent.call(c) }) : a.attachEvent("on" + b, c)) }, n = function (a, b, c, d) { if ("removeEventListener" in a) try { a.removeEventListener(b, c, d) } catch (e) { if ("object" != typeof c || !c.handleEvent) throw e; a.removeEventListener(b, function (a) { c.handleEvent.call(c, a) }, d) } else "detachEvent" in a && ("object" == typeof c && c.handleEvent ? a.detachEvent("on" + b, function () { c.handleEvent.call(c) }) : a.detachEvent("on" + b, c)) }, o = function (a) { if (a.children.length < 1) throw new Error("The Nav container has no containing elements"); for (var b = [], c = 0; c < a.children.length; c++)1 === a.children[c].nodeType && b.push(a.children[c]); return b }, p = function (a, b) { for (var c in b) a.setAttribute(c, b[c]) }, q = function (a, b) { 0 !== a.className.indexOf(b) && (a.className += " " + b, a.className = a.className.replace(/(^\s*)|(\s*$)/g, "")) }, r = function (a, b) { var c = new RegExp("(\\s|^)" + b + "(\\s|$)"); a.className = a.className.replace(c, " ").replace(/(^\s*)|(\s*$)/g, "") }, s = function (a, b, c) { for (var d = 0; d < a.length; d++)b.call(c, d, a[d]) }, t = a.createElement("style"), u = a.documentElement, v = function (b, c) { var d; this.options = { animate: !0, transition: 284, label: "Menu", insert: "before", customToggle: "", closeOnNavClick: !1, openPos: "relative", navClass: "js-nav", navActiveClass: "js-nav-active", jsClass: "js", init: function () { }, open: function () { }, close: function () { } }; for (d in c) this.options[d] = c[d]; if (q(u, this.options.jsClass), this.wrapperEl = b.replace("#", ""), a.getElementById(this.wrapperEl)) this.wrapper = a.getElementById(this.wrapperEl); else { if (!a.querySelector(this.wrapperEl)) throw new Error("The nav element you are trying to select doesn't exist"); this.wrapper = a.querySelector(this.wrapperEl) } this.wrapper.inner = o(this.wrapper), h = this.options, g = this.wrapper, this._init(this) }; return v.prototype = { destroy: function () { this._removeStyles(), r(g, "closed"), r(g, "opened"), r(g, h.navClass), r(g, h.navClass + "-" + this.index), r(u, h.navActiveClass), g.removeAttribute("style"), g.removeAttribute("aria-hidden"), n(b, "resize", this, !1), n(b, "focus", this, !1), n(a.body, "touchmove", this, !1), n(i, "touchstart", this, !1), n(i, "touchend", this, !1), n(i, "mouseup", this, !1), n(i, "keyup", this, !1), n(i, "click", this, !1), h.customToggle ? i.removeAttribute("aria-hidden") : i.parentNode.removeChild(i) }, toggle: function () { j === !0 && (l ? this.close() : this.open()) }, open: function () { l || (r(g, "closed"), q(g, "opened"), q(u, h.navActiveClass), q(i, "active"), g.style.position = h.openPos, p(g, { "aria-hidden": "false" }), l = !0, h.open()) }, close: function () { l && (q(g, "closed"), r(g, "opened"), r(u, h.navActiveClass), r(i, "active"), p(g, { "aria-hidden": "true" }), h.animate ? (j = !1, setTimeout(function () { g.style.position = "absolute", j = !0 }, h.transition + 10)) : g.style.position = "absolute", l = !1, h.close()) }, resize: function () { "none" !== b.getComputedStyle(i, null).getPropertyValue("display") ? (k = !0, p(i, { "aria-hidden": "false" }), g.className.match(/(^|\s)closed(\s|$)/) && (p(g, { "aria-hidden": "true" }), g.style.position = "absolute"), this._createStyles(), this._calcHeight()) : (k = !1, p(i, { "aria-hidden": "true" }), p(g, { "aria-hidden": "false" }), g.style.position = h.openPos, this._removeStyles()) }, handleEvent: function (a) { var c = a || b.event; switch (c.type) { case "touchstart": this._onTouchStart(c); break; case "touchmove": this._onTouchMove(c); break; case "touchend": case "mouseup": this._onTouchEnd(c); break; case "click": this._preventDefault(c); break; case "keyup": this._onKeyUp(c); break; case "focus": case "resize": this.resize(c) } }, _init: function () { this.index = c++ , q(g, h.navClass), q(g, h.navClass + "-" + this.index), q(g, "closed"), j = !0, l = !1, this._closeOnNavClick(), this._createToggle(), this._transitions(), this.resize(); var d = this; setTimeout(function () { d.resize() }, 20), m(b, "resize", this, !1), m(b, "focus", this, !1), m(a.body, "touchmove", this, !1), m(i, "touchstart", this, !1), m(i, "touchend", this, !1), m(i, "mouseup", this, !1), m(i, "keyup", this, !1), m(i, "click", this, !1), h.init() }, _createStyles: function () { t.parentNode || (t.type = "text/css", a.getElementsByTagName("head")[0].appendChild(t)) }, _removeStyles: function () { t.parentNode && t.parentNode.removeChild(t) }, _createToggle: function () { if (h.customToggle) { var b = h.customToggle.replace("#", ""); if (a.getElementById(b)) i = a.getElementById(b); else { if (!a.querySelector(b)) throw new Error("The custom nav toggle you are trying to select doesn't exist"); i = a.querySelector(b) } } else { var c = a.createElement("a"); c.innerHTML = h.label, p(c, { href: "#", "class": "nav-toggle" }), "after" === h.insert ? g.parentNode.insertBefore(c, g.nextSibling) : g.parentNode.insertBefore(c, g), i = c } }, _closeOnNavClick: function () { if (h.closeOnNavClick) { var a = g.getElementsByTagName("a"), b = this; s(a, function (c) { m(a[c], "click", function () { k && b.toggle() }, !1) }) } }, _preventDefault: function (a) { return a.preventDefault ? (a.stopImmediatePropagation && a.stopImmediatePropagation(), a.preventDefault(), a.stopPropagation(), !1) : void (a.returnValue = !1) }, _onTouchStart: function (a) { Event.prototype.stopImmediatePropagation || this._preventDefault(a), this.startX = a.touches[0].clientX, this.startY = a.touches[0].clientY, this.touchHasMoved = !1, n(i, "mouseup", this, !1) }, _onTouchMove: function (a) { (Math.abs(a.touches[0].clientX - this.startX) > 10 || Math.abs(a.touches[0].clientY - this.startY) > 10) && (this.touchHasMoved = !0) }, _onTouchEnd: function (a) { if (this._preventDefault(a), k && !this.touchHasMoved) { if ("touchend" === a.type) return void this.toggle(); var c = a || b.event; 3 !== c.which && 2 !== c.button && this.toggle() } }, _onKeyUp: function (a) { var c = a || b.event; 13 === c.keyCode && this.toggle() }, _transitions: function () { if (h.animate) { var a = g.style, b = "max-height " + h.transition + "ms"; a.WebkitTransition = a.MozTransition = a.OTransition = a.transition = b } }, _calcHeight: function () { for (var a = 0, b = 0; b < g.inner.length; b++)a += g.inner[b].offsetHeight; var c = "." + h.jsClass + " ." + h.navClass + "-" + this.index + ".opened{max-height:" + a + "px !important} ." + h.jsClass + " ." + h.navClass + "-" + this.index + ".opened.dropdown-active {max-height:9999px !important}"; t.styleSheet ? t.styleSheet.cssText = c : t.innerHTML = c, c = "" } }, new v(d, e) }; "undefined" != typeof module && module.exports ? module.exports = d : b.responsiveNav = d }(document, window, 0); \ No newline at end of file diff --git a/ydoc/scripts/plugins/slideout.min.js b/ydoc/scripts/plugins/slideout.min.js new file mode 100644 index 0000000..81c06b8 --- /dev/null +++ b/ydoc/scripts/plugins/slideout.min.js @@ -0,0 +1 @@ +!function (t) { if ("object" == typeof exports && "undefined" != typeof module) module.exports = t(); else if ("function" == typeof define && define.amd) define([], t); else { var e; "undefined" != typeof window ? e = window : "undefined" != typeof global ? e = global : "undefined" != typeof self && (e = self), e.Slideout = t() } }(function () { var t, e, n; return function i(t, e, n) { function o(r, a) { if (!e[r]) { if (!t[r]) { var u = typeof require == "function" && require; if (!a && u) return u(r, !0); if (s) return s(r, !0); var l = new Error("Cannot find module '" + r + "'"); throw l.code = "MODULE_NOT_FOUND", l } var f = e[r] = { exports: {} }; t[r][0].call(f.exports, function (e) { var n = t[r][1][e]; return o(n ? n : e) }, f, f.exports, i, t, e, n) } return e[r].exports } var s = typeof require == "function" && require; for (var r = 0; r < n.length; r++)o(n[r]); return o }({ 1: [function (t, e, n) { "use strict"; var i = t("decouple"); var o = t("emitter"); var s; var r = false; var a = window.document; var u = a.documentElement; var l = window.navigator.msPointerEnabled; var f = { start: l ? "MSPointerDown" : "touchstart", move: l ? "MSPointerMove" : "touchmove", end: l ? "MSPointerUp" : "touchend" }; var h = function v() { var t = /^(Webkit|Khtml|Moz|ms|O)(?=[A-Z])/; var e = a.getElementsByTagName("script")[0].style; for (var n in e) { if (t.test(n)) { return "-" + n.match(t)[0].toLowerCase() + "-" } } if ("WebkitOpacity" in e) { return "-webkit-" } if ("KhtmlOpacity" in e) { return "-khtml-" } return "" }(); function c(t, e) { for (var n in e) { if (e[n]) { t[n] = e[n] } } return t } function p(t, e) { t.prototype = c(t.prototype || {}, e.prototype) } function d(t) { while (t.parentNode) { if (t.getAttribute("data-slideout-ignore") !== null) { return t } t = t.parentNode } return null } function _(t) { t = t || {}; this._startOffsetX = 0; this._currentOffsetX = 0; this._opening = false; this._moved = false; this._opened = false; this._preventOpen = false; this._touch = t.touch === undefined ? true : t.touch && true; this._side = t.side || "left"; this.panel = t.panel; this.menu = t.menu; if (!this.panel.classList.contains("slideout-panel")) { this.panel.classList.add("slideout-panel") } if (!this.panel.classList.contains("slideout-panel-" + this._side)) { this.panel.classList.add("slideout-panel-" + this._side) } if (!this.menu.classList.contains("slideout-menu")) { this.menu.classList.add("slideout-menu") } if (!this.menu.classList.contains("slideout-menu-" + this._side)) { this.menu.classList.add("slideout-menu-" + this._side) } this._fx = t.fx || "ease"; this._duration = parseInt(t.duration, 10) || 300; this._tolerance = parseInt(t.tolerance, 10) || 70; this._padding = this._translateTo = parseInt(t.padding, 10) || 256; this._orientation = this._side === "right" ? -1 : 1; this._translateTo *= this._orientation; if (this._touch) { this._initTouchEvents() } } p(_, o); _.prototype.open = function () { var t = this; this.emit("beforeopen"); if (!u.classList.contains("slideout-open")) { u.classList.add("slideout-open") } this._setTransition(); this._translateXTo(this._translateTo); this._opened = true; setTimeout(function () { t.panel.style.transition = t.panel.style["-webkit-transition"] = ""; t.emit("open") }, this._duration + 50); return this }; _.prototype.close = function () { var t = this; if (!this.isOpen() && !this._opening) { return this } this.emit("beforeclose"); this._setTransition(); this._translateXTo(0); this._opened = false; setTimeout(function () { u.classList.remove("slideout-open"); t.panel.style.transition = t.panel.style["-webkit-transition"] = t.panel.style[h + "transform"] = t.panel.style.transform = ""; t.emit("close") }, this._duration + 50); return this }; _.prototype.toggle = function () { return this.isOpen() ? this.close() : this.open() }; _.prototype.isOpen = function () { return this._opened }; _.prototype._translateXTo = function (t) { this._currentOffsetX = t; this.panel.style[h + "transform"] = this.panel.style.transform = "translateX(" + t + "px)"; return this }; _.prototype._setTransition = function () { this.panel.style[h + "transition"] = this.panel.style.transition = h + "transform " + this._duration + "ms " + this._fx; return this }; _.prototype._initTouchEvents = function () { var t = this; this._onScrollFn = i(a, "scroll", function () { if (!t._moved) { clearTimeout(s); r = true; s = setTimeout(function () { r = false }, 250) } }); this._preventMove = function (e) { if (t._moved) { e.preventDefault() } }; a.addEventListener(f.move, this._preventMove); this._resetTouchFn = function (e) { if (typeof e.touches === "undefined") { return } t._moved = false; t._opening = false; t._startOffsetX = e.touches[0].pageX; t._preventOpen = !t._touch || !t.isOpen() && t.menu.clientWidth !== 0 }; this.panel.addEventListener(f.start, this._resetTouchFn); this._onTouchCancelFn = function () { t._moved = false; t._opening = false }; this.panel.addEventListener("touchcancel", this._onTouchCancelFn); this._onTouchEndFn = function () { if (t._moved) { t.emit("translateend"); t._opening && Math.abs(t._currentOffsetX) > t._tolerance ? t.open() : t.close() } t._moved = false }; this.panel.addEventListener(f.end, this._onTouchEndFn); this._onTouchMoveFn = function (e) { if (r || t._preventOpen || typeof e.touches === "undefined" || d(e.target)) { return } var n = e.touches[0].clientX - t._startOffsetX; var i = t._currentOffsetX = n; if (Math.abs(i) > t._padding) { return } if (Math.abs(n) > 20) { t._opening = true; var o = n * t._orientation; if (t._opened && o > 0 || !t._opened && o < 0) { return } if (!t._moved) { t.emit("translatestart") } if (o <= 0) { i = n + t._padding * t._orientation; t._opening = false } if (!(t._moved && u.classList.contains("slideout-open"))) { u.classList.add("slideout-open") } t.panel.style[h + "transform"] = t.panel.style.transform = "translateX(" + i + "px)"; t.emit("translate", i); t._moved = true } }; this.panel.addEventListener(f.move, this._onTouchMoveFn); return this }; _.prototype.enableTouch = function () { this._touch = true; return this }; _.prototype.disableTouch = function () { this._touch = false; return this }; _.prototype.destroy = function () { this.close(); a.removeEventListener(f.move, this._preventMove); this.panel.removeEventListener(f.start, this._resetTouchFn); this.panel.removeEventListener("touchcancel", this._onTouchCancelFn); this.panel.removeEventListener(f.end, this._onTouchEndFn); this.panel.removeEventListener(f.move, this._onTouchMoveFn); a.removeEventListener("scroll", this._onScrollFn); this.open = this.close = function () { }; return this }; e.exports = _ }, { decouple: 2, emitter: 3 }], 2: [function (t, e, n) { "use strict"; var i = function () { return window.requestAnimationFrame || window.webkitRequestAnimationFrame || function (t) { window.setTimeout(t, 1e3 / 60) } }(); function o(t, e, n) { var o, s = false; function r(t) { o = t; a() } function a() { if (!s) { i(u); s = true } } function u() { n.call(t, o); s = false } t.addEventListener(e, r, false); return r } e.exports = o }, {}], 3: [function (t, e, n) { "use strict"; var i = function (t, e) { if (!(t instanceof e)) { throw new TypeError("Cannot call a class as a function") } }; n.__esModule = true; var o = function () { function t() { i(this, t) } t.prototype.on = function e(t, n) { this._eventCollection = this._eventCollection || {}; this._eventCollection[t] = this._eventCollection[t] || []; this._eventCollection[t].push(n); return this }; t.prototype.once = function n(t, e) { var n = this; function i() { n.off(t, i); e.apply(this, arguments) } i.listener = e; this.on(t, i); return this }; t.prototype.off = function o(t, e) { var n = undefined; if (!this._eventCollection || !(n = this._eventCollection[t])) { return this } n.forEach(function (t, i) { if (t === e || t.listener === e) { n.splice(i, 1) } }); if (n.length === 0) { delete this._eventCollection[t] } return this }; t.prototype.emit = function s(t) { var e = this; for (var n = arguments.length, i = Array(n > 1 ? n - 1 : 0), o = 1; o < n; o++) { i[o - 1] = arguments[o] } var s = undefined; if (!this._eventCollection || !(s = this._eventCollection[t])) { return this } s = s.slice(0); s.forEach(function (t) { return t.apply(e, i) }); return this }; return t }(); n["default"] = o; e.exports = n["default"] }, {}] }, {}, [1])(1) }); \ No newline at end of file diff --git a/ydoc/styles/style.css b/ydoc/styles/style.css new file mode 100644 index 0000000..12b97d7 --- /dev/null +++ b/ydoc/styles/style.css @@ -0,0 +1,2281 @@ +@charset "UTF-8"; +/* + * by wenbo.dong@qunar.com + * method color + * param $color: color HEX + * param $index: color number +*/ +body { + font-size: 14px; + color: rgba(3, 17, 31, 0.87); + -webkit-font-smoothing: antialiased; + line-height: 1.5; +} + +@font-face { + font-family: 'ydoc'; + src: url("https://s.qunarzz.com/ydoc/fonts/0.0.4/ydoc.eot"); + /* IE9*/ + src: url("https://s.qunarzz.com/ydoc/fonts/0.0.4/ydoc.woff") format("woff"), url("https://s.qunarzz.com/ydoc/fonts/0.0.4/ymfe.ttf") format("truetype"), url("https://s.qunarzz.com/ydoc/fonts/0.0.4/ydoc.svg#iconfont") format("svg"); + /* iOS 4.1- */ +} + +.ui-font-ydoc { + font-family: ydoc; +} + +::-webkit-scrollbar { + width: 6px; + height: 4px; +} + +::-webkit-scrollbar-track { + -webkit-box-shadow: rgba(217, 237, 255, 0.3); + background: rgba(217, 237, 255, 0.1); +} + +::-webkit-scrollbar-thumb { + border-radius: 3px; + background: rgba(101, 181, 255, 0.3); + -webkit-box-shadow: rgba(217, 237, 255, 0.5); +} + +::-webkit-scrollbar-thumb:window-inactive { + background: rgba(101, 181, 255, 0.3); +} + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: .5em; + font-weight: 400; + line-height: 1.5; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +h1, .h1 { + font-size: 32px; +} + +h2, .h2 { + font-size: 24px; +} + +h3, .h3 { + font-size: 20px; +} + +h4, .h4 { + font-size: 16px; +} + +h5, .h5 { + font-size: 14px; +} + +h6, .h6 { + font-size: 12px; +} + +@media screen and (max-width: 960px) { + ::-webkit-scrollbar { + /*隐藏滚轮*/ + display: none; + } +} + +*, +::before, +::after { + box-sizing: border-box; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +html { + font-size: 100px; +} + +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", SimSun, sans-serif; +} + +ul, +ol, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +figure, +form, +fieldset, +legend, +input, +textarea, +button, +p, +blockquote, +th, +td, +pre, +xmp { + margin: 0; + padding: 0; +} + +input, +textarea, +button, +select, +pre, +xmp, +tt, +code, +kbd, +samp { + line-height: inherit; + font-family: inherit; +} + +table { + border-collapse: collapse; + border-spacing: 0; + table-layout: fixed; + text-align: left; +} + +fieldset, +img { + border: 0; + vertical-align: middle; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +main, +menu, +nav, +section, +summary { + display: block; +} + +audio, +canvas, +video { + display: inline-block; +} + +blockquote:before, +blockquote:after, +q:before, +q:after { + content: "\0020"; +} + +textarea { + resize: vertical; +} + +input, +textarea, +button, +select +a { + outline: 0 none; +} + +input, +textarea, +button, +select { + color: inherit; +} + +input:disabled, +textarea:disabled, +button:disabled, +select:disabled { + opacity: 1; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +mark { + background-color: rgba(0, 0, 0, 0); +} + +a, +ins, +s, +u, +del { + text-decoration: none; +} + +a, +img { + -webkit-touch-callout: none; +} + +a:link, a:visited { + color: inherit; +} + +.row { + box-sizing: border-box; + width: 100%; +} + +.row:after { + content: ''; + display: table; + clear: both; +} + +.container { + box-sizing: border-box; +} + +@media screen and (max-width: 600px) { + .col-xs-1 { + width: 8.33333%; + float: left; + box-sizing: border-box; + } + .col-xs-2 { + width: 16.66667%; + float: left; + box-sizing: border-box; + } + .col-xs-3 { + width: 25%; + float: left; + box-sizing: border-box; + } + .col-xs-4 { + width: 33.33333%; + float: left; + box-sizing: border-box; + } + .col-xs-5 { + width: 41.66667%; + float: left; + box-sizing: border-box; + } + .col-xs-6 { + width: 50%; + float: left; + box-sizing: border-box; + } + .col-xs-7 { + width: 58.33333%; + float: left; + box-sizing: border-box; + } + .col-xs-8 { + width: 66.66667%; + float: left; + box-sizing: border-box; + } + .col-xs-9 { + width: 75%; + float: left; + box-sizing: border-box; + } + .col-xs-10 { + width: 83.33333%; + float: left; + box-sizing: border-box; + } + .col-xs-11 { + width: 91.66667%; + float: left; + box-sizing: border-box; + } + .col-xs-12 { + width: 100%; + float: left; + box-sizing: border-box; + } + .container { + width: 100%; + padding: 0 .16rem; + } +} + +@media screen and (min-width: 600px) { + .col-sm-1 { + width: 8.33333%; + float: left; + box-sizing: border-box; + } + .col-sm-2 { + width: 16.66667%; + float: left; + box-sizing: border-box; + } + .col-sm-3 { + width: 25%; + float: left; + box-sizing: border-box; + } + .col-sm-4 { + width: 33.33333%; + float: left; + box-sizing: border-box; + } + .col-sm-5 { + width: 41.66667%; + float: left; + box-sizing: border-box; + } + .col-sm-6 { + width: 50%; + float: left; + box-sizing: border-box; + } + .col-sm-7 { + width: 58.33333%; + float: left; + box-sizing: border-box; + } + .col-sm-8 { + width: 66.66667%; + float: left; + box-sizing: border-box; + } + .col-sm-9 { + width: 75%; + float: left; + box-sizing: border-box; + } + .col-sm-10 { + width: 83.33333%; + float: left; + box-sizing: border-box; + } + .col-sm-11 { + width: 91.66667%; + float: left; + box-sizing: border-box; + } + .col-sm-12 { + width: 100%; + float: left; + box-sizing: border-box; + } + .container { + width: 100%; + padding: 0 .16rem; + } +} + +@media screen and (min-width: 960px) { + .col-md-1 { + width: 8.33333%; + float: left; + box-sizing: border-box; + } + .col-md-2 { + width: 16.66667%; + float: left; + box-sizing: border-box; + } + .col-md-3 { + width: 25%; + float: left; + box-sizing: border-box; + } + .col-md-4 { + width: 33.33333%; + float: left; + box-sizing: border-box; + } + .col-md-5 { + width: 41.66667%; + float: left; + box-sizing: border-box; + } + .col-md-6 { + width: 50%; + float: left; + box-sizing: border-box; + } + .col-md-7 { + width: 58.33333%; + float: left; + box-sizing: border-box; + } + .col-md-8 { + width: 66.66667%; + float: left; + box-sizing: border-box; + } + .col-md-9 { + width: 75%; + float: left; + box-sizing: border-box; + } + .col-md-10 { + width: 83.33333%; + float: left; + box-sizing: border-box; + } + .col-md-11 { + width: 91.66667%; + float: left; + box-sizing: border-box; + } + .col-md-12 { + width: 100%; + float: left; + box-sizing: border-box; + } + .container { + width: 100%; + padding: 0 .16rem; + } +} + +@media screen and (min-width: 1440px) { + .col-lg-1 { + width: 8.33333%; + float: left; + box-sizing: border-box; + } + .col-lg-2 { + width: 16.66667%; + float: left; + box-sizing: border-box; + } + .col-lg-3 { + width: 25%; + float: left; + box-sizing: border-box; + } + .col-lg-4 { + width: 33.33333%; + float: left; + box-sizing: border-box; + } + .col-lg-5 { + width: 41.66667%; + float: left; + box-sizing: border-box; + } + .col-lg-6 { + width: 50%; + float: left; + box-sizing: border-box; + } + .col-lg-7 { + width: 58.33333%; + float: left; + box-sizing: border-box; + } + .col-lg-8 { + width: 66.66667%; + float: left; + box-sizing: border-box; + } + .col-lg-9 { + width: 75%; + float: left; + box-sizing: border-box; + } + .col-lg-10 { + width: 83.33333%; + float: left; + box-sizing: border-box; + } + .col-lg-11 { + width: 91.66667%; + float: left; + box-sizing: border-box; + } + .col-lg-12 { + width: 100%; + float: left; + box-sizing: border-box; + } + .container { + width: 100%; + padding: 0 .16rem; + } +} + +.useage1 { + background-color: #d9edff; +} + +.useage2 { + background-color: #b2daff; +} + +.useage3 { + background-color: #8cc8ff; +} + +.useage4 { + background-color: #65b5ff; +} + +.useage5 { + background-color: #3fa3ff; +} + +.useage6 { + background-color: #1890ff; +} + +.useage7 { + background-color: #1373cc; +} + +.useage8 { + background-color: #0e5699; +} + +.useage9 { + background-color: #0a3a66; +} + +.useage10 { + background-color: #051d33; +} + +/*! responsive-nav.js 1.0.39 by @viljamis */ +.m-header-nav ul { + margin: 0; + padding: 0; + width: 100%; + display: block; + list-style: none; +} + +.js .m-header-nav { + clip: rect(0 0 0 0); + max-height: 0; + position: absolute; + display: block; + overflow: hidden; + zoom: 1; +} + +.m-header-nav.opened { + max-height: 9999px; +} + +.nav-toggle { + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; +} + +@media screen and (min-width: 960px) { + .js .m-header-nav { + position: relative; + } + .js .m-header-nav.closed { + max-height: none; + } + .nav-toggle { + display: none; + } + .m-header-btn { + display: none; + } +} + +html { + height: 100%; +} + +body { + width: 100%; + height: 100%; +} + +.slideout-menu { + position: fixed; + left: 0; + top: 0; + bottom: 0; + right: 0; + z-index: 0; + width: 256px; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + display: none; +} + +.slideout-panel { + position: relative; + z-index: 1; + will-change: transform; +} + +.slideout-open, +.slideout-open body, +.slideout-open .slideout-panel { + overflow: hidden; +} + +.slideout-open .slideout-menu { + display: block; +} + +@media screen and (min-width: 960px) { + .slideout-menu { + display: block; + } + .slideout-panel { + will-change: inherit; + } +} + +@font-face { + font-family: octicons-link; + src: url(data:font/woff;charset=utf-8;base64,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) format("woff"); +} + +.markdown-body { + box-sizing: border-box; + min-width: 200px; + margin: 0 auto; + padding: 0; + transition: all 0.2s; +} + +@media screen and (min-width: 960px) { + .markdown-body { + padding: 0 .4rem; + } +} + +.markdown-body { + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + line-height: 1.5; + color: #24292e; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 16px; + line-height: 1.5; + word-wrap: break-word; +} + +.markdown-body .pl-c { + color: #6a737d; +} + +.markdown-body .pl-c1, +.markdown-body .pl-s .pl-v { + color: #005cc5; +} + +.markdown-body .pl-e, +.markdown-body .pl-en { + color: #6f42c1; +} + +.markdown-body .pl-smi, +.markdown-body .pl-s .pl-s1 { + color: #24292e; +} + +.markdown-body .pl-ent { + color: #22863a; +} + +.markdown-body .pl-k { + color: #d73a49; +} + +.markdown-body .pl-s, +.markdown-body .pl-pds, +.markdown-body .pl-s .pl-pse .pl-s1, +.markdown-body .pl-sr, +.markdown-body .pl-sr .pl-cce, +.markdown-body .pl-sr .pl-sre, +.markdown-body .pl-sr .pl-sra { + color: #032f62; +} + +.markdown-body .pl-v, +.markdown-body .pl-smw { + color: #e36209; +} + +.markdown-body .pl-bu { + color: #b31d28; +} + +.markdown-body .pl-ii { + color: #fafbfc; + background-color: #b31d28; +} + +.markdown-body .pl-c2 { + color: #fafbfc; + background-color: #d73a49; +} + +.markdown-body .pl-c2::before { + content: "^M"; +} + +.markdown-body .pl-sr .pl-cce { + font-weight: bold; + color: #22863a; +} + +.markdown-body .pl-ml { + color: #735c0f; +} + +.markdown-body .pl-mh, +.markdown-body .pl-mh .pl-en, +.markdown-body .pl-ms { + font-weight: bold; + color: #005cc5; +} + +.markdown-body .pl-mi { + font-style: italic; + color: #24292e; +} + +.markdown-body .pl-mb { + font-weight: bold; + color: #24292e; +} + +.markdown-body .pl-md { + color: #b31d28; + background-color: #ffeef0; +} + +.markdown-body .pl-mi1 { + color: #22863a; + background-color: #f0fff4; +} + +.markdown-body .pl-mc { + color: #e36209; + background-color: #ffebda; +} + +.markdown-body .pl-mi2 { + color: #f6f8fa; + background-color: #005cc5; +} + +.markdown-body .pl-mdr { + font-weight: bold; + color: #6f42c1; +} + +.markdown-body .pl-ba { + color: #586069; +} + +.markdown-body .pl-sg { + color: #959da5; +} + +.markdown-body .pl-corl { + text-decoration: underline; + color: #032f62; +} + +.markdown-body .octicon { + display: inline-block; + vertical-align: text-top; + fill: currentColor; +} + +.markdown-body a { + background-color: transparent; +} + +.markdown-body a:active, +.markdown-body a:hover { + outline-width: 0; +} + +.markdown-body strong { + font-weight: inherit; +} + +.markdown-body strong { + font-weight: bolder; +} + +.markdown-body h1 { + font-size: 2em; + margin: 0.67em 0; +} + +.markdown-body img { + border-style: none; +} + +.markdown-body code, +.markdown-body kbd, +.markdown-body pre { + font-family: monospace, monospace; + font-size: 1em; +} + +.markdown-body hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +.markdown-body input { + font: inherit; + margin: 0; +} + +.markdown-body input { + overflow: visible; +} + +.markdown-body [type="checkbox"] { + box-sizing: border-box; + padding: 0; +} + +.markdown-body * { + box-sizing: border-box; +} + +.markdown-body input { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +.markdown-body a { + color: #0366d6; + text-decoration: none; +} + +.markdown-body a:hover { + text-decoration: underline; +} + +.markdown-body strong { + font-weight: 600; +} + +.markdown-body hr { + height: 0; + margin: 15px 0; + overflow: hidden; + background: transparent; + border: 0; + border-bottom: 1px solid #dfe2e5; +} + +.markdown-body hr::before { + display: table; + content: ""; +} + +.markdown-body hr::after { + display: table; + clear: both; + content: ""; +} + +.markdown-body table { + border-spacing: 0; + border-collapse: collapse; +} + +.markdown-body td, +.markdown-body th { + padding: 0; +} + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin-top: 0; + margin-bottom: 0; +} + +.markdown-body h1 { + font-size: 32px; + font-weight: 600; +} + +.markdown-body h2 { + font-size: 24px; + font-weight: 600; +} + +.markdown-body h3 { + font-size: 20px; + font-weight: 600; +} + +.markdown-body h4 { + font-size: 16px; + font-weight: 600; +} + +.markdown-body h5 { + font-size: 14px; + font-weight: 600; +} + +.markdown-body h6 { + font-size: 12px; + font-weight: 600; +} + +.markdown-body p { + margin-top: 0; + margin-bottom: 10px; +} + +.markdown-body blockquote { + margin: 0; +} + +.markdown-body ul, +.markdown-body ol { + padding-left: 0; + margin-top: 0; + margin-bottom: 0; +} + +.markdown-body ol ol, +.markdown-body ul ol { + list-style-type: lower-roman; +} + +.markdown-body ul ul ol, +.markdown-body ul ol ol, +.markdown-body ol ul ol, +.markdown-body ol ol ol { + list-style-type: lower-alpha; +} + +.markdown-body dd { + margin-left: 0; +} + +.markdown-body code { + font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 12px; +} + +.markdown-body pre { + margin-top: 0; + margin-bottom: 0; + font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 12px; +} + +.markdown-body .octicon { + vertical-align: text-bottom; +} + +.markdown-body .pl-0 { + padding-left: 0 !important; +} + +.markdown-body .pl-1 { + padding-left: 4px !important; +} + +.markdown-body .pl-2 { + padding-left: 8px !important; +} + +.markdown-body .pl-3 { + padding-left: 16px !important; +} + +.markdown-body .pl-4 { + padding-left: 24px !important; +} + +.markdown-body .pl-5 { + padding-left: 32px !important; +} + +.markdown-body .pl-6 { + padding-left: 40px !important; +} + +.markdown-body::before { + display: table; + content: ""; +} + +.markdown-body::after { + display: table; + clear: both; + content: ""; +} + +.markdown-body > *:first-child { + margin-top: 0 !important; +} + +.markdown-body > *:last-child { + margin-bottom: 0 !important; +} + +.markdown-body a:not([href]) { + color: inherit; + text-decoration: none; +} + +.markdown-body .anchor { + float: left; + padding-right: 4px; + margin-left: -20px; + line-height: 1; +} + +.markdown-body .anchor:focus { + outline: none; +} + +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin-top: 0; + margin-bottom: 16px; +} + +.markdown-body hr { + height: 0.095em; + padding: 0; + margin: 24px 0; + background-color: #e1e4e8; + border: 0; +} + +.markdown-body blockquote { + padding: 0 1em; + color: #6a737d; + border-left: 0.25em solid #dfe2e5; +} + +.markdown-body blockquote > :first-child { + margin-top: 0; +} + +.markdown-body blockquote > :last-child { + margin-bottom: 0; +} + +.markdown-body kbd { + display: inline-block; + padding: 3px 5px; + font-size: 11px; + line-height: 10px; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin-top: 24px; + margin-bottom: 16px; + font-weight: 600; + line-height: 1.25; +} + +.markdown-body h1 .octicon-link, +.markdown-body h2 .octicon-link, +.markdown-body h3 .octicon-link, +.markdown-body h4 .octicon-link, +.markdown-body h5 .octicon-link, +.markdown-body h6 .octicon-link { + color: #1b1f23; + vertical-align: middle; + visibility: hidden; +} + +.markdown-body h1:hover .anchor, +.markdown-body h2:hover .anchor, +.markdown-body h3:hover .anchor, +.markdown-body h4:hover .anchor, +.markdown-body h5:hover .anchor, +.markdown-body h6:hover .anchor { + text-decoration: none; +} + +.markdown-body h1:hover .anchor .octicon-link, +.markdown-body h2:hover .anchor .octicon-link, +.markdown-body h3:hover .anchor .octicon-link, +.markdown-body h4:hover .anchor .octicon-link, +.markdown-body h5:hover .anchor .octicon-link, +.markdown-body h6:hover .anchor .octicon-link { + visibility: visible; +} + +.markdown-body h1 { + padding-bottom: 0.3em; + font-size: 2em; +} + +.markdown-body h2 { + padding-bottom: 0.3em; + font-size: 1.5em; +} + +.markdown-body h3 { + font-size: 1.25em; +} + +.markdown-body h4 { + font-size: 1em; +} + +.markdown-body h5 { + font-size: 0.875em; +} + +.markdown-body h6 { + font-size: 0.85em; + color: #6a737d; +} + +.markdown-body ul, +.markdown-body ol { + padding-left: 2em; +} + +.markdown-body ul ul, +.markdown-body ul ol, +.markdown-body ol ol, +.markdown-body ol ul { + margin-top: 0; + margin-bottom: 0; +} + +.markdown-body li { + word-wrap: break-all; +} + +.markdown-body li > p { + margin-top: 16px; +} + +.markdown-body li + li { + margin-top: 0.25em; +} + +.markdown-body dl { + padding: 0; +} + +.markdown-body dl dt { + padding: 0; + margin-top: 16px; + font-size: 1em; + font-style: italic; + font-weight: 600; +} + +.markdown-body dl dd { + padding: 0 16px; + margin-bottom: 16px; +} + +.markdown-body table { + display: block; + width: 100%; + overflow: auto; +} + +.markdown-body table th { + font-weight: 600; +} + +.markdown-body table th, +.markdown-body table td { + padding: 6px 13px; + border: 1px solid #dfe2e5; +} + +.markdown-body table tr { + background-color: #fff; + border-top: 1px solid #c6cbd1; +} + +.markdown-body table tr:nth-child(2n) { + background-color: #f6f8fa; +} + +.markdown-body img { + max-width: 100%; + box-sizing: content-box; + background-color: #fff; +} + +.markdown-body img[align=right] { + padding-left: 20px; +} + +.markdown-body img[align=left] { + padding-right: 20px; +} + +.markdown-body code { + padding: 0.2em 0.4em; + margin: 0; + font-size: 85%; + background-color: rgba(27, 31, 35, 0.05); + border-radius: 3px; +} + +.markdown-body pre { + word-wrap: normal; +} + +.markdown-body pre > code { + padding: 0; + margin: 0; + font-size: 100%; + word-break: normal; + white-space: pre; + background: transparent; + border: 0; +} + +.markdown-body .highlight { + margin-bottom: 16px; +} + +.markdown-body .highlight pre { + margin-bottom: 0; + word-break: normal; +} + +.markdown-body .highlight pre, +.markdown-body pre { + padding: 16px; + overflow: auto; + font-size: 85%; + line-height: 1.45; + background-color: #f6f8fa; + border-radius: 3px; +} + +.markdown-body pre code { + display: inline; + max-width: auto; + padding: 0; + margin: 0; + overflow: visible; + line-height: inherit; + word-wrap: normal; + background-color: transparent; + border: 0; +} + +.markdown-body .full-commit .btn-outline:not(:disabled):hover { + color: #005cc5; + border-color: #005cc5; +} + +.markdown-body kbd { + display: inline-block; + padding: 3px 5px; + font: 11px "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; + line-height: 10px; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #d1d5da; + border-bottom-color: #c6cbd1; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #c6cbd1; +} + +.markdown-body :checked + .radio-label { + position: relative; + z-index: 1; + border-color: #0366d6; +} + +.markdown-body .task-list-item { + list-style-type: none; +} + +.markdown-body .task-list-item + .task-list-item { + margin-top: 3px; +} + +.markdown-body .task-list-item input { + margin: 0 0.2em 0.25em -1.6em; + vertical-align: middle; +} + +.markdown-body hr { + border-bottom-color: #eee; +} + +.markdown-body { + color: rgba(3, 17, 31, 0.87); +} + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + font-weight: 500; +} + +.markdown-body h2 { + margin: .54rem 0 .24rem; +} + +.markdown-body h3 { + margin: .32rem 0 .16rem; +} + +.markdown-body a { + text-decoration: none; + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + color: #086fff; + transition: all .2s; +} + +.markdown-body a:hover { + text-decoration: none; + border-bottom-color: rgba(3, 17, 31, 0.87); +} + +.markdown-body .type { + color: #1890ff; + font-size: 16px; +} + +.markdown-body .versionTag { + background: #1890ff; + color: white; + border-radius: 4px; + padding: 2px 4px; + font-size: 14px; +} + +.markdown-body .desc { + font-size: 16px; + font-weight: normal; + color: rgba(0, 0, 0, 0.65); +} + +/* PrismJS 1.14.0 +http://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} + +pre[class*="language-"]::selection, pre[class*="language-"] ::selection, +code[class*="language-"]::selection, code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + background: rgba(255, 255, 255, 0.5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + +.token.function, +.token.class-name { + color: #DD4A68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +.g-doc { + display: flex; + width: 100%; + height: 100%; + position: relative; + left: 0; + transition: all 0.2s ease-in-out; + overflow: hidden; +} + +.m-main { + width: 100%; + overflow-y: auto; + -webkit-overflow-scrolling: touch; +} + +.m-main h2:before, .m-main h3:before { + content: ""; + display: block; + margin-top: -.8rem; + height: .8rem; + visibility: hidden; +} + +@media screen and (min-width: 960px) { + .m-main { + box-shadow: none; + } +} + +.m-header { + min-height: .64rem; + position: relative; + display: flex; + flex-direction: column; + position: fixed; + top: 0; + left: 0; + width: 100%; + color: rgba(3, 17, 31, 0.54); + background-color: rgba(255, 255, 255, 0.97); + border-bottom: 1px solid #e5f0f6; + backface-visibility: hidden; + z-index: 999; + transform: translateZ(1000px); +} + +.m-header-title { + height: .64rem; + padding: 0 .3rem; + display: flex; + align-items: center; +} + +.m-header-title .name, .m-header-title .logo { + display: inline-block; + vertical-align: middle; +} + +.m-header-title .name { + margin-left: .08rem; + color: #1890ff; + font-size: 24px; + font-family: 'Arial Rounded MT Bold'; +} + +.m-header-nav { + border-bottom: 1px solid #e5f0f6; +} + +.m-header-nav .m-header-items { + padding: 0.16rem; +} + +.m-header-nav .m-header-subtitle { + padding: .08rem 1.5em; +} + +.m-header-nav .m-header-subtitle .item { + width: 100%; +} + +.m-header-nav .m-header-subtitle .link { + display: inline-block; + padding-left: .5em; + padding-right: .5em; + width: 100%; + background-color: transparent; + border-radius: 4px; + line-height: .32rem; + transition: all 0.2s; +} + +.m-header-nav .m-header-subtitle .link:hover { + color: #086fff; + background-color: #d9edff; +} + +.m-header-nav .item { + width: 100%; + display: inline-block; + line-height: 1.8; + padding: 0 0.08rem; + position: relative; + cursor: pointer; + transition: all 0.2s; + min-height: .32rem; +} + +.m-header-nav .item:last-child { + margin-bottom: 0; +} + +.m-header-nav .item.active { + font-weight: bold; + color: #086fff; +} + +.m-header-nav .href { + display: inline-block; + padding-left: .5em; + padding-right: .5em; + height: .32rem; + line-height: .32rem; + width: 100%; + background-color: transparent; + border-radius: 4px; + transition: all 0.2s; +} + +.m-header-nav .href:active { + color: #086fff; + background-color: #d9edff; +} + +.m-header-btn { + position: absolute; + top: 0.08rem; + right: 0.08rem; + font-size: .24rem; + line-height: 1; + color: rgba(3, 17, 31, 0.87); + border-radius: 2px; + padding: .12rem; + cursor: pointer; + transition: color 0.2s; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; +} + +.m-header-btn:hover { + font-weight: bold; + color: rgba(3, 17, 31, 0.87); +} + +@media screen and (min-width: 960px) { + .m-header { + flex-direction: row; + } + .m-header-nav { + border: none; + } + .m-header-nav .m-header-items { + padding: 0; + } + .m-header-nav .m-header-items > .item:hover .m-header-subtitle { + display: flex; + flex-wrap: wrap; + } + .m-header-nav .m-header-subtitle { + display: none; + position: absolute; + left: 50%; + top: .64rem; + transform: translateX(-50%); + width: auto; + background-color: #fff; + padding: .08rem 1.5em; + border-radius: 4px; + box-shadow: 0 10px 100px rgba(50, 50, 93, 0.1), 0 5px 35px rgba(50, 50, 93, 0.15), 0 2px 15px rgba(0, 0, 0, 0.1); + } + .m-header-nav .m-header-subtitle .item { + margin: 0; + padding: 0 8px; + color: rgba(3, 17, 31, 0.54); + font-weight: normal; + white-space: nowrap; + line-height: .4rem; + } + .m-header-nav .m-header-subtitle:after { + content: ''; + display: block; + width: 0; + height: 0; + border: .08rem solid transparent; + border-bottom-color: #fff; + position: absolute; + left: 50%; + top: -.16rem; + transform: translateX(-50%); + } + .m-header-nav .m-header-subtitle .link { + display: inline-block; + padding: 0; + width: auto; + } + .m-header-nav .m-header-subtitle .link:hover { + font-weight: bold; + color: rgba(3, 17, 31, 0.87); + background-color: transparent; + } + .m-header-nav .href { + border-radius: 0; + } + .m-header-nav .href:hover { + font-weight: bold; + color: rgba(3, 17, 31, 0.87); + background-color: transparent; + } + .m-header-nav .item { + margin: 0 0.16rem; + line-height: .64rem; + width: auto; + transition: color 0.2s; + } + .m-header-nav .item.active { + font-weight: bold; + color: rgba(3, 17, 31, 0.87); + } + .m-header-nav .item.active .href { + border-bottom: 2px solid #086fff; + } + .m-header .m-header-nav { + overflow: inherit; + } +} + +.m-aside { + margin-top: .65rem; + height: 100%; + height: calc(100% - .65rem); +} + +.m-summary { + padding: 0 .24rem; + position: absolute; + left: 0; + top: 0; + z-index: 1; + width: 100%; + height: 0; + overflow-y: auto; + transform: translateY(0); + -webkit-overflow-scrolling: touch; + transition: all .2s ease-in-out; +} + +.m-summary ul, .m-summary ol, .m-summary li { + list-style: none; +} + +.m-summary.active { + height: 100%; + background-color: #fff; + padding: .24rem; + padding-bottom: 0.89rem; + transform: translateY(0.65rem); +} + +.m-summary.active .m-summary-content { + display: block; +} + +.m-summary.active + .m-summary-switch .top { + transform: translateY(10px); +} + +.m-summary.active + .m-summary-switch .bottom { + transform: translateY(-10px); +} + +.m-summary-content { + width: 100%; + height: auto; + display: none; +} + +.m-summary-block { + margin-bottom: .16rem; +} + +.m-summary-block.active > .href { + font-weight: bold; + color: #086fff; +} + +.m-summary-title { + font-size: 16px; + line-height: 2.5; + color: rgba(3, 17, 31, 0.87); + padding-left: 0.08rem; +} + +.m-summary-list { + font-size: 14px; + line-height: 2.5; +} + +.m-summary-list.indent { + padding-left: 1.5em; +} + +.m-summary-list .item { + color: rgba(3, 17, 31, 0.54); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.m-summary-list .item.active { + font-weight: bold; + color: #086fff; +} + +.m-summary-list .href { + color: inherit; + background-color: transparent; + transition: all 0.2s; + display: inline-block; + width: 100%; + border-radius: 4px; + padding-left: 0.08rem; +} + +.m-summary-list .href:hover { + color: #086fff; + background-color: #f1f6fe; +} + +.m-summary-switch { + font-family: 'ydoc'; + position: fixed; + right: .24rem; + bottom: .48rem; + width: .6rem; + height: .6rem; + border-radius: 50%; + color: #086fff; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.3); + background-color: rgba(3, 17, 31, 0.87); + user-select: none; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column-reverse; + z-index: 1; +} + +.m-summary-switch .top, .m-summary-switch .bottom { + transition: all 0.2s ease-in-out; +} + +@media screen and (min-width: 960px) { + .m-summary { + position: static; + height: 100%; + width: 2.4rem; + padding: .4rem .32rem; + flex: 3rem 0 0; + } + .m-summary-switch { + display: none; + } + .m-summary-content { + display: block; + } +} + +@media screen and (min-width: 1440px) { + .m-summary { + width: 3rem; + } +} + +.m-content { + overflow-y: scroll; + overflow-x: hidden; + -webkit-overflow-scrolling: touch; + background-color: #fff; + padding-top: .64rem; + height: 100%; +} + +.m-content-container { + padding: .48rem .25rem 1.2rem; + margin: 0 auto; +} + +.m-content-container .title { + line-height: 1; +} + +.m-content-container.markdown-body { + min-height: calc(100% - 2rem); +} + +.m-paging { + font-size: 16px; +} + +.m-paging-item { + width: 50%; + color: inherit; + transition: color 0.2s; +} + +.m-paging-item:hover { + color: #086fff; +} + +.m-paging-prev { + float: left; +} + +.m-paging-next { + float: right; + text-align: right; +} + +.m-paging:after { + content: ''; + display: block; + clear: both; +} + +.m-paging .href { + display: inline-block; + width: 100%; + padding: .04rem; +} + +@media screen and (min-width: 960px) { + .m-content { + overflow-x: hidden; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + } +} + +.m-footer { + background-color: #fff; + padding: .24rem; +} + +.m-footer ul, .m-footer ol, .m-footer li { + list-style: none; +} + +.m-footer-container { + display: flex; + flex-direction: column; + padding: 0; + transition: all 0.2s; +} + +.m-footer-title { + text-align: center; +} + +.m-footer-links { + display: flex; + flex-wrap: wrap; + justify-content: center; +} + +.m-footer-links .group { + flex-basis: 30%; + flex-shrink: 0; + margin-bottom: .24rem; +} + +.m-footer-links .title { + font-size: 16px; + line-height: 2; + color: rgba(3, 17, 31, 0.38); +} + +.m-footer .href { + line-height: 1.8; + padding: .3em 0; + color: rgba(3, 17, 31, 0.54); + background-color: #fff; + transition: all 0.2s; +} + +.m-footer .href:hover { + color: #086fff; +} + +.m-footer-title { + color: rgba(3, 17, 31, 0.54); +} + +@media screen and (min-width: 960px) { + .m-footer { + font-size: 16px; + color: rgba(3, 17, 31, 0.54); + padding: .24rem 0rem; + } + .m-footer-container { + margin: .24rem auto; + padding: 0; + } + .m-footer-title { + flex: 1; + padding-top: .25rem; + border-top: solid 1px #999999; + } + .m-footer-links { + width: 90%; + margin: 0px auto; + justify-content: inherit; + flex: 2; + } +} + +.g-home .m-header { + background-color: #fbfbfb; +} + +.g-home .m-section { + position: relative; +} + +.g-home .m-section-container { + max-width: 10.24rem; + margin: 0 auto; + padding: .8rem .32rem; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; +} + +.g-home .m-section-title { + text-align: center; +} + +.g-home .m-section-title .name { + margin-bottom: .24rem; + font-size: 32px; + position: relative; +} + +.g-home .m-section-title .name:after { + content: ''; + display: block; + position: absolute; + bottom: -.08rem; + left: 50%; + transform: translateX(-50%); + width: .48rem; + height: 3px; + background-color: #1373cc; +} + +.g-home .m-section-title .desc { + font-size: 16px; + color: rgba(3, 17, 31, 0.54); + line-height: 1.6; +} + +.g-home .m-section-banner { + width: 100%; + position: absolute; + z-index: 0; + bottom: 0; + left: 50%; + transform: translateX(-45%); +} + +.g-home .m-section-banner img { + width: 100%; +} + +.g-home .m-section-box { + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +.g-home .m-section .btn { + width: 1.2rem; + padding: .14rem; + line-height: .2rem; + font-size: 16px; + color: #086fff; + background-color: #fff; + margin-right: .08rem; + border-radius: 6px; + text-align: center; + user-select: none; + border: 1px solid #086fff; + cursor: pointer; + transition: all 0.2s; + transform: translateY(0); +} + +.g-home .m-section .btn:hover { + color: #fff; + background-color: #086fff; +} + +.g-home .m-section .btn:active { + background-color: #0e5699; +} + +.g-home .m-section .btn.btn-ghost { + border: none; +} + +.g-home .m-section.home { + padding: .56rem .24rem .64rem; + border-bottom: 1px solid rgba(3, 17, 31, 0.14); +} + +.g-home .m-section.home .m-section-container { + padding: .24rem .32rem; +} + +.g-home .m-section.home .m-section-title { + text-align: center; + color: rgba(3, 17, 31, 0.87); + flex: 1; +} + +.g-home .m-section.home .m-section-title .name { + margin-bottom: .16rem; +} + +.g-home .m-section.home .m-section-title .name:after { + display: none; +} + +.g-home .m-section.home .m-section-title .desc { + color: rgba(3, 17, 31, 0.54); +} + +.g-home .m-section.home .m-section-btngroup { + display: flex; + justify-content: center; + padding: .24rem 0 .16rem; + position: relative; + z-index: 1; +} + +.g-home .m-section.home .caption { + font-size: 16px; + color: rgba(3, 17, 31, 0.38); +} + +.g-home .m-section.feature { + background-color: #fbfbfb; + border-bottom: 1px solid rgba(3, 17, 31, 0.14); +} + +.g-home .m-section.feature .item { + flex: 0 0 46%; + margin-bottom: .32rem; +} + +.g-home .m-section.feature .item .title { + font-size: 32px; + margin-bottom: .16rem; +} + +.g-home .m-section.feature .item .desc { + font-size: 16px; + color: rgba(3, 17, 31, 0.54); +} + +@media screen and (min-width: 960px) { + .g-home .m-section.home .m-section-container { + flex-direction: row; + } + .g-home .m-section-title .name { + font-size: 48px; + } + .g-home .m-section-title .desc { + font-size: 20px; + line-height: 1.6; + } + .g-home .m-section-banner { + width: 7.7rem; + } + .g-home .m-section .btn { + margin-right: .16rem; + } + .g-home .m-section.home .m-section-title { + text-align: left; + } + .g-home .m-section.home .m-section-title .name { + font-size: 48px; + } + .g-home .m-section.home .m-section-title .desc { + font-size: 20px; + line-height: 1.6; + } + .g-home .m-section.home .m-section-btngroup { + justify-content: left; + margin-top: .24rem; + } + .g-home .m-footer .m-footer-container { + max-width: 10.24rem; + } +} + +* { + margin: 0; + padding: 0; +} diff --git a/ydoc/ydoc-plugin-search/core.js b/ydoc/ydoc-plugin-search/core.js new file mode 100644 index 0000000..ea37963 --- /dev/null +++ b/ydoc/ydoc-plugin-search/core.js @@ -0,0 +1,104 @@ +$(function() { + var num = 0; + var searchText; + var searchMaxNum = 8; + var releativePath = document.getElementById('releativePath').getAttribute('content') || '' + releativePath = releativePath.trim() + releativePath = releativePath === '' ? '.' : releativePath + + window.ydoc_plugin_search_core = function(text) { + if(!text)return; + var json = cloneObject(window.ydoc_plugin_search_json); + searchText = text; + num = 0; + var result = search(json) + return result; + }; + + function cloneObject(obj) { + if (typeof obj === 'object') { + if (Array.isArray(obj)) { + var newArr = []; + obj.forEach(function(item, index){ + newArr[index] = cloneObject(item) + }) + return newArr; + } else { + var newObj = {}; + for (var key in obj) { + newObj[key] = cloneObject(obj[key]); + } + return newObj; + } + } else { + return obj; + } + } + + + function search(json){ + var result = {} + for(var i in json){ + var data = searchBook(json[i]) + data = filterBook(data); + if(data.length > 0) result[i] = data; + } + return result; + } + + function filterBook(newPages){ + return newPages.filter(function(page){ + if(!page.content && page.children.length === 0){ + return false; + } + return true; + }) + } + + function searchBook(pages){ + var newPages = []; + if(num > searchMaxNum){ + return newPages; + } + for(var i=0, l=pages.length; i< l; i++){ + var page = pages[i], searchPage = null; + if(num > searchMaxNum){ + return newPages; + } + if(page.content && page.content.toLowerCase().indexOf(searchText.toLowerCase()) !== -1){ + num++; + searchPage = { + title: page.title, + content: page.content, + url: releativePath + page.url, + children: [] + }; + }else{ + searchPage = { + title: page.title, + url: releativePath + page.url, + children: [] + }; + } + + newPages.push(searchPage) + + if(page.children && Array.isArray(page.children)){ + for(var j=0, len=page.children.length; j< len; j++){ + var child = page.children[j]; + if(num >= searchMaxNum ){ + return newPages; + } + if(child.content && child.content.toLowerCase().indexOf(searchText.toLowerCase()) !== -1){ + child.url = releativePath + child.url; + searchPage.children.push(child) + num++; + } + } + } + } + return newPages; + } + + +}); diff --git a/ydoc/ydoc-plugin-search/search.css b/ydoc/ydoc-plugin-search/search.css new file mode 100644 index 0000000..b08cec4 --- /dev/null +++ b/ydoc/ydoc-plugin-search/search.css @@ -0,0 +1,118 @@ +.m-search { + position: absolute; + right: .64rem; + top: .32rem; + transform: translateY(-50%); + z-index: 9999; +} +.m-search-result { + display: none; + position: absolute; + width: 100vw; + width: calc(100vw - 32px); + right: -.48rem; + top: .48rem; + background-color: #fff; + border-radius: 4px; + box-shadow: 0 50px 100px rgba(50, 50, 93, 0.1), 0 15px 35px rgba(50, 50, 93, 0.15), 0 5px 15px rgba(0, 0, 0, 0.1); + overflow: hidden; +} +.m-search .highlight { + font-weight: bold; + color: #1890ff; +} +.m-search .icon { + font-family: ydoc; + position: absolute; + left: 16px; + top: 16px; + transform: translate(-50%, -50%); + font-size: 18px; +} +.m-search .input { + width: 72px; + border: none; + outline: none; + height: 32px; + line-height: 32px; + padding: 0 .08rem 0 .32rem; + font-size: 14px; + border-radius: 4px; + transition: all .2s ease-in-out; +} +.m-search .input:focus { + width: 160px; + background-color: #f7f7f7; +} +.m-search .empty { + padding: .32rem .24rem; + text-align: center; +} +.m-search .headline { + padding: .08rem; + background-color: #1890ff; + color: #fff; + font-weight: bold; +} +.m-search .row { + display: flex; + margin: .08rem 0; +} +.m-search .subtitle { + flex: 0 0 25%; + text-align: right; + padding: .04rem .08rem; + background-color: #fff; + cursor: pointer; + transition: all .2s ease-in-out; +} +.m-search .subtitle:hover { + background-color: #f7f7f7; +} +.m-search .content { + flex: 1; + font-weight: bold; + border-left: 1px solid rgba(3, 17, 31, 0.14); + padding: 0; + padding-right: .08rem; +} +.m-search .caption { + padding: .04rem 0; + padding-left: 0.08rem; + background-color: #fff; + cursor: pointer; + transition: all .2s ease-in-out; + display: flex; + flex-direction: column; +} +.m-search .caption:hover { + background-color: #f7f7f7; +} +.m-search .caption.active { + background-color: #f7f7f7; +} +.m-search .caption .desc { + font-weight: normal; +} + +/* 宽度小于 600px 时搜索结果横贯屏幕宽度 */ +@media screen and (min-width: 600px) { + .m-search-result { + position: absolute; + right: 0; + width: 4rem; + } + .m-search .input:focus { + width: 180px; + } +} + +/* PC 端不显示 nav 按钮 因此更靠右侧 */ +@media screen and (min-width: 960px) { + .m-search { + right: .24rem; + } + .m-search .input:focus { + width: 200px; + } +} \ No newline at end of file diff --git a/ydoc/ydoc-plugin-search/search.js b/ydoc/ydoc-plugin-search/search.js new file mode 100644 index 0000000..582b00c --- /dev/null +++ b/ydoc/ydoc-plugin-search/search.js @@ -0,0 +1,127 @@ +$(function(){ + var $searchResult = $('.js-search-result'), + $searchInput = $('.js-input'), + activeIndex = 0; + + // 去除空格 + String.prototype.trim = function () { + return this.replace(/(^\s*)|(\s*$)/g, ''); + }; + + // 判断是否为空对象 + function realObj(obj) { + if (JSON.stringify(obj) === '{}') { + return false; // 如果为空,返回false + } + return true; + } + + // 防抖函数 + function debounce(func, wait) { + var timeout; + return function () { + var context = this, args = arguments; + clearTimeout(timeout); + timeout = setTimeout(function() { + func.apply(context, args); + }, wait); + }; + } + + var highlightTextPrevNum = 6; + var highlightTextNextNum = 20; + // 简化文本内容长度 + function simplifyStrDom(str, val) { + var index = str.indexOf(val); + var startIndex = index > highlightTextPrevNum ? index - highlightTextPrevNum : 0; + var sliceStr = str.slice(startIndex, index + val.length + highlightTextNextNum); + var reg = new RegExp('(' + val + ')', 'gi'); // 搜索的值进行高亮替换时, 忽略大小写 + var addHighlightStr = sliceStr.replace(reg, '' + '$1' + ''); + var ellipsis = (sliceStr.lastIndexOf(val) != -1) || (sliceStr.lastIndexOf(val) > highlightTextNextNum) ? '...' : ''; + return addHighlightStr + ellipsis; + } + + // 隐藏搜索结果框 + // function hideSearchResult() { + // $searchResult.hide(); + // } + + // 监听输入的内容 + $searchInput.on('input', debounce(function(e) { + var val = e.target.value.trim(), + res = window.ydoc_plugin_search_core(val); + + activeIndex = 0; + $(document).off('keydown'); + $searchResult.show(); + if (realObj(res) || val === '') { + var dom = ''; + for (var key in res) { + dom += '
' + key + '
'; + res[key].forEach(function(item) { + var contentDom = ''; + if (item.children.length) { + item.children.forEach(function (i) { + i.title = simplifyStrDom(i.title, val); + i.content = simplifyStrDom(i.content, val); + contentDom += '
' + + '
' + i.title + '
' + + '
' + i.content + '
'; + }); + } else { + item.title = simplifyStrDom(item.title, val); + item.content = simplifyStrDom(item.content, val); + contentDom = '' + + '
' + item.title + '
' + + '
' + item.content + '
'; + } + dom += '
' + + '' + item.title + '' + + '
' + contentDom + '
' + + '
'; + }); + } + $searchResult.html(dom); + + var $captions = $('.js-search-result .caption'); + var length = $captions.length; + if ($captions.length) { + $captions[activeIndex].classList.add('active'); + // 监听键盘事件 up: 38, down: 40, enter: 13 + $(document).on('keydown', function (e) { + if (e.keyCode == 38) { + $captions[activeIndex].classList.remove('active'); + activeIndex = (activeIndex + length - 1) % length; + $captions[activeIndex].classList.add('active'); + } else if (e.keyCode == 40) { + $captions[activeIndex].classList.remove('active'); + activeIndex = (activeIndex + 1) % length; + $captions[activeIndex].classList.add('active'); + } else if (e.keyCode == 13) { + $searchResult.hide(); + window.open($captions[activeIndex].href, '_self'); + } + }); + } + // 按下 ESC 键,清空输入框并收起搜索结果框 + $(document).on('keydown', function (e) { + if (e.keyCode == 27) { + $searchInput[0].value = ''; + $searchResult.hide(); + } + }); + } else { + $searchResult.html('
没有找到关键词 ' + val + ' 的搜索结果
') + } + }, 300)); + + $searchResult.on('click', function (e) { + return false; + }) + + $(document).on('click', function(e){ + $searchResult.hide(); + }) + + +}) \ No newline at end of file