AutoJs6

- Overview - 综述
- About - 关于文档
- Progress - 文档部署进度
- Changelog - 文档更新日志

- Manual - AutoJs6 使用手册
- Q & A - 疑难解答

- Global - 全局对象
- Automator - 自动化
- AutoJs6 - 本体应用
- App - 通用应用
- Color - 颜色
- Image - 图像
- OCR - 光学字符识别
- Keys - 按键
- Device - 设备
- Storage - 储存
- File - 文件
- Engine - 引擎
- Task - 任务
- Module - 模块
- Plugins - 插件
- Toast - 消息浮动框
- Notice - 消息通知
- Console - 控制台
- Shell
- Media - 多媒体
- Sensor - 传感器
- Recorder - 记录器
- Timer - 定时器
- Thread - 线程
- Continuation - 协程
- Event - 事件监听
- Dialog - 对话框
- Floaty - 悬浮窗
- Canvas - 画布
- UI - 用户界面
- Web - 万维网
- HTTP
- Base64
- Crypto - 密文
- Internationalization - 国际化
- Standardization - 标准化
- E4X

- UiSelector - 选择器
- UiObject - 控件节点
- UiObjectCollection - 控件集合
- UiObjectActions - 控件节点行为
- ImageWrapper - 包装图像类
- App - 应用枚举类
- Color - 颜色类
- Version - 版本工具类
- Polyfill - 代码填泥
- Arrayx - Array 扩展
- Numberx - Number 扩展
- Mathx - Math 扩展

- Exceptions - 异常
- Intent - 意图
- Runtime - 运行时
- Context - 上下文
- Activity - 活动

- Scripting Java - 脚本化 Java
- Android API Level - 安卓 API 级别
- Color Table - 颜色列表

- Glossaries - 术语
- HttpHeader - HTTP 标头
- HttpRequestMethods - HTTP 请求方法
- MimeType - MIME 类型
- NotificationChannel - 通知渠道

- Data Types - 数据类型
- Omnipotent Types - 全能类型
- Storage - 存储类
- AndroidBundle
- AndroidRect
- CryptoCipherOptions
- CryptoKey
- CryptoKeyPair
- ConsoleBuildOptions
- HttpRequestBuilderOptions
- HttpRequestHeaders
- HttpResponseBody
- HttpResponseHeaders
- HttpResponse
- InjectableWebClient
- InjectableWebView
- NoticeOptions
- NoticeChannelOptions
- NoticePresetConfiguration
- NoticeBuilder
- Okhttp3HttpUrl
- OcrOptions
- Okhttp3Request
- OpencvPoint
- OpencvRect
- OpencvSize

- GitHub - 应用项目地址
- GitHub - 文档项目地址

# 存储 (Storages)#

storages 模块可用于保存 [ 简单数据 / 配置信息 / 列表清单 ] 等.
保存的数据在脚本间共享, 因此不适于敏感数据的存储.

保存数据时, 需要一个名称, 类似命名空间.
一个名称对应一个独立的本地存储.
但无法像 Web 开发中 LocalStorage 一样提供域名独立的存储, 因为脚本路径可能随时改变.

保存的数据仅在以下情况下会被删除:

- AutoJs6 应用被卸载或清除数据
- 使用 storages.remove / Storage#remove / Storage#clear 等方法删除

支持存入的数据类型:

- number
- boolean
- string
- null
- Array
- Object
- ... ...

具体的存入规则详见 Storage#put 小节.

存入时, 由 JSON.stringify 序列化数据为 string 类型后再存入,
读取时, 由 JSON.parse 还原为原本的数据类型.

storages

## [m] create#

### create(name)#

- name { string } - 存储名称
- returns { Storage }

以 `name` 参数为名称创建一个本地存储, 并返回 Storage 实例:

    /* 创建一个名为 fruit 的本地存储. */
    let sto = storages.create('fruit');

    /* 存入 "键值对" 数据. */
    sto.put('apple', 10);
    sto.put('banana', 20);

    /* 访问数据. */
    sto.get('apple'); // 10
    sto.get('banana'); // 20
    sto.get('cherry'); // undefined

不同的 `name` 参数可以创建不同的本地存储:

    let stoFruit = storages.create('fruit');
    let stoPhone = storages.create('phone');

    /* "键" 名均为 apple, 不同的本地存储之间数据独立. */
    stoFruit.put('apple', 7);
    stoPhone.put('apple', 3);

    /* 访问数据 */
    stoFruit.get('apple') // 7
    stoPhone.get('apple') // 3

如果 `name` 参数对应的本地存储已存在, 则返回一个本地存储副本:

    let sto = storages.create('fruit');
    sto.put('apple', 10);

    /* 名为 fruit 的本地存储已创建, 因此返回的是存储副本. */
    let stoCopied = storages.create('fruit');

    /* 虽然 stoCopied 没有存入 apple 数据, 但 fruit 本地存储中存在. */
    stoCopied.get('apple'); // 10

    /* 副本与原始的本地存储并非引用关系. */
    sto === stoCopied; // false

为保证数据安全及唯一性, `name` 参数应尽量具体:

    storages.create('project-publishing-schedule');

## [m] remove#

### remove(name)#

- name { string } - 存储名称
- returns { boolean } - name 参数对应的本地存储是否存在

清除名为 `name` 的本地存储包含的全部数据.

如果名为 `name` 的本地存储已存在, 返回 `true`, 否则返回 `false`.

    let sto = storages.create('fruit');
    sto.put('apple', 10);
    sto.get('apple'); // 10

    /* 相当于 storages.create('fruit').clear(); . */
    storages.remove('fruit'); // true

    /* 执行 remove 方法后, sto 对象将不存在任何存储数据. */
    sto.get('apple'); // undefined

    /* 但 sto 依然可以存放新的数据. */
    sto.put('banana', 20);
    sto.get('banana'); // 20