了解JS脚本

辅助功能和微服务都使用JS脚本实现,JS脚本是标准ECMAScript(JavaScript)的一个子集,比标准JavaScript简单很多且功能强大,没有编程基础的同学也能很快掌握;支持标准JavaScript函数库;支持多线程并发编程,在线编辑、动态部署并立即生效。

1.例子(可直接运行)

启动微信并滚动微信页面(点击展开)
function main() {
    if (1 == launchApp('com.tencent.mm')) {
        var ret = findView('txt:发现|txt:搜索', {maxStep: 40});
        if (ret.length > 0) {
            toast('进入微信成功');
            var index = 0;
            while (index < 3) {
                scroll('up', {distance: Math.random() * 0.5 + 0.45, duration: parseInt(Math.random() * 200 + 300), afterWait: 3000});
                ++index;
                toast('滚动:' + index);
            }
            toast('任务结束,退出');
        } else {
            toast('进入微信失败');
        }
    } else {
        toast('启动微信失败');
    }
}
                            

2.运算符

运算符用于赋值、比较值、执行算术运算等。
类型 运算符
算数运算符 +、-、*、/、%、++、--
比较运算符 >、>=、<、<=、!=、==(注意这里取消了繁杂的===和!==)
逻辑运算符 &&、||、!
赋值运算符 =、+=、-=、*=、/=、%=
字符串运算符 +、+=
三元运算符 ?:
其他运算符 typeof、delete、new

3.语句

语句 说明
import 导入其他脚本,import 脚本名表达式;。例:import 'Xiaomi_runtime';
var 声明变量,变量必须先声明才能使用。例:var a = 1, b, c = 'demo';
if、else if、else 根据条件执行语句块。例:if (a == 'str') {...} else if (a == 'hello') {...} else {...}
for 循环遍历代码块多次。例:for(var i = 0; i < 10; ++i){...}
for...of 循环遍历可迭代对象的值,支持数组、对象等。例:for(var item of container){...}
while 条件为true时执行语句块。例:while(a < 10){...}
function 函数声明,支持默认参数。例:function main(a = 1, b = 'hello'){...}
break 退出循环。
continue 中断一次循环,并继续循环中的下一次迭代。
return 停止执行函数并从该函数返回值。

4.变量类型

类型名 说明
number 整型,和浮点型。
boolean 支持常量true,false。
string 字符串常量用''或""表示,例:'hello'。支持模版字符串,用``(两个反引号)表示,可以嵌入变量,例:`hello ${name}`,在执行过程中会动态解析字符串值。
object json对象类型,可以用.和[]操作符访问属性,用{}创建json对象,例:var obj = {name:'a', value:12};。
array json数组类型,可以用[]操作符访问数组,用[]创建json数组,注意:数组支持负索引,比如arr[-1]表示取arr的最后一个元素,-2表示倒数第二个元素,依次类推。例:var arr =['z', 12];。

5.脚本特性

一般语句必须严格以;结束,变量必须先声明才能使用。例:var a = 10;。
支持//和/**/注释。
if、for、while等,即使仅有一条子语句也必须使用{}。
不支持switch和do-while,使用for、if、while来替代。
不支持匿名函数和闭包,但支持自定义函数赋值给变量。
暂不支持位运算。
不支持===、!==,直接统一使用==、!=,简化使用。
支持函数默认参数。
支持import语句,导入脚本。
支持模版字符串。
新增编译指令:__global、__permanent、__day(仅用于移动端脚本),用于 var后,分别表示声明全局变量,持久变量和day变量,全局变量可以在多个模块间共享,可以在不同线程间通信;持久变量永久存在,在当前脚本文件可见,除非卸载程序;day变量作用域为一天,在当前脚本文件可见,每天0点day变量复位为初始值。
默认main函数为入口函数,外部可以传递参数给main函数,main返回值为脚本的返回值,可以使用callScript函数可以调用其他脚本。
支持系统事件回调,cbNotification(textList, className, packageName, rawEvent)、cbWindowChange(textList, className, packageName, rawEvent),开发者可以在脚本中定义这两个函数,当系统收到通知消息或窗口改变事件后,会自动调用回调函数。注意事件回调函数和main函数不在一个线程中执行,可以通过__global变量来进行通信。

6.系统内置常量

系统内置常量以rs开头,可以直接在脚本中使用。
常量名 类型 说明
rsCurWindowClassName string 当前的窗口的类名(仅用于移动端端脚本)
rsScreenWidth integer 屏幕宽,单位像素(仅用于移动端端脚本)
rsScreenHeight integer 屏幕高,单位像素(仅用于移动端端脚本)
rsDensity float 屏幕密度 dp和px转换公式:px=dp*rsDensity(仅用于移动端端脚本)
rsPhoneNumber string 当前设备的电话号码(仅用于移动端端脚本)
rsDeviceName string 当前设备名(仅用于移动端端脚本)
rsUUID string 当前设备的uuid(仅用于移动端端脚本)
rsOpenId string 当前用户的openId(仅用于后端脚本)
rsIsDev boolean 当前是否处于调试状态(仅用于后端脚本)
Copyright © 2021-2022 冰狐智能辅助. All rights reserved.