Auto.js 中的 JavaScript 基础——你需要知道的语言要点
脚本语言简介
Auto.js 内部运行 Rhino JS 引擎(开源 Java 实现的 JS 引擎),支持:
- ES5 语法:变量、函数、数组、对象、正则、Date、Math——全部支持
- ES6 语法:
let/const、箭头函数、模板字符串、解构赋值——部分支持 - 不支持
async/await、Promise(4.1.1 原版)、class继承(复杂场景可能有问题) - Auto.js Pro 9.x + AutoX.js 追加 Node.js 引擎,完整支持 ES2021
变量与常量
// 推荐:用 let 和 const
let appName = "淘宝";
const MAX_RETRY = 3;
// 也可以用 var(ES5 风格,兼容性好)
var count = 0;
函数定义
// 普通函数
function clickButton(text) {
text(text).waitFor().click();
}
// 箭头函数(ES6 简写)
const delay = (ms) => sleep(ms);
// 匿名函数
events.on("exit", function() {
toast("脚本已退出");
});
条件判断
if (auto.service != null) {
clickButton("确认");
} else if (auto.mode) {
// 另一种情况
} else {
toast("请开启无障碍");
}
// switch
switch (appName) {
case "淘宝": launchPackage("com.taobao.taobao"); break;
case "京东": launchPackage("com.jingdong.app.mall"); break;
}
循环
// for 循环
for (var i = 0; i < 10; i++) {
clickButton("下一个");
sleep(1000);
}
// while 循环
while (true) {
if (text("停止").findOne()) break;
sleep(500);
}
// forEach(Rhino 支持)
["淘宝", "京东", "拼多多"].forEach(function(app) {
toast("准备操作:" + app);
});
常用内置对象
// 数组
var list = [1, 2, 3, 4, 5];
list.push(6);
list.length;
// 对象
var config = { package: "com.taobao.taobao", time: 1500 };
config.package; // "com.taobao.taobao"
// 字符串
"Hello " + "Auto.js"; // 字符串拼接
"Hello".indexOf("e"); // 查找
text.replace("Hello", "Hi"); // 替换
"hello".toUpperCase(); // HELLO
Rhino 特有的坑
- typeof null === "object"(这是 JS 全局历史遗留)
- 没有
const在某些早期版本(AutoJs6 和 Pro 支持) - Date.parse 行为可能不同
- 不支持模块的 ESM 语法(只能用
require())
如果你之前写过前端 JS 或 Node.js,切换到 Rhino 可能需要注意这些差异。简单的脚本逻辑不会踩到这些坑。