变量、函数与控制流 — AutoJs6 基础语法速查
变量声明
// var — 函数作用域,允许重复声明
var x = 1;
// let — 块级作用域,推荐使用
let name = "AutoJs6";
// const — 块级作用域,声明后不可重新赋值
const VERSION = "6.7.0";
作用域对比
function demo() {
var a = 1; // 函数内可见
if (true) {
var b = 2; // var 没有块级作用域,函数外也可见
let c = 3; // let 有块级作用域
}
console.log(a, b); // 1, 2 ✅
console.log(c); // ❌ ReferenceError: c is not defined
}
函数
函数声明
// 标准声明
function sayHello(name) {
return "Hello, " + name + "!";
}
// 调用
console.log(sayHello("AutoJs6")); // Hello, AutoJs6!
箭头函数(推荐)
// 单行简写
let square = (x) => x * x;
// 多行写法
let greet = (name, greeting = "Hi") => {
let msg = greeting + ", " + name;
return msg;
};
// 无参数箭头函数
let getTime = () => new Date().toLocaleTimeString();
默认参数
function divide(a, b = 1) {
return a / b;
}
divide(10, 2); // 5
divide(10); // 10(b 默认 1)
条件判断
if-else
let score = 85;
if (score >= 90) {
console.log("优秀");
} else if (score >= 60) {
console.log("及格");
} else {
console.log("不及格");
}
三元运算符
let age = 18;
let status = age >= 18 ? "成年" : "未成年";
switch-case
let day = new Date().getDay();
switch (day) {
case 0:
console.log("周日");
break;
case 6:
console.log("周六");
break;
default:
console.log("工作日");
}
循环
for 循环
// 标准 for
for (let i = 0; i < 5; i++) {
console.log(i); // 0, 1, 2, 3, 4
}
// 遍历数组
let fruits = ["苹果", "香蕉", "橙子"];
for (let i = 0; i < fruits.length; i++) {
console.log(fruits[i]);
}
// for...of(推荐)
for (let fruit of fruits) {
console.log(fruit);
}
while 循环
let count = 0;
while (count < 3) {
console.log(count);
count++;
}
for-in(遍历对象)
let config = {
autoEnabled: true,
debugMode: false,
timeout: 5000
};
for (let key in config) {
console.log(key + ": " + config[key]);
}
常用内置函数
AutoJs6 在全局作用域注入了大量实用函数:
控制台与提示
console.log("普通日志");
console.info("信息日志");
console.warn("警告");
console.error("错误");
toast("屏幕短暂提示");
toastLog("提示 + 控制台输出");
时间等待
sleep(1000); // 暂停 1 秒
// 注意:sleep 会阻塞脚本执行!
// 建议在自动化场景用 waitFor/findOne 的超时参数代替
数学与数字
Math.random(); // 0 到 1 之间的随机数
Math.floor(3.7); // 3(向下取整)
Math.round(3.5); // 4(四舍五入)
Math.max(1, 5, 3); // 5
Math.min(1, 5, 3); // 1
字符串处理
let text = "Hello AutoJs6";
text.length; // 14
text.indexOf("Auto"); // 6
text.replace("Auto", "Hi"); // "Hello HiJs6"
text.toUpperCase(); // "HELLO AUTOJS6"
text.toLowerCase(); // "hello autojs6"
text.includes("Js"); // true
text.split(" "); // ["Hello", "AutoJs6"]
// 模板字符串(推荐)
let name = "AutoJs6";
let version = 6.7;
console.log(`${name} v${version}`); // AutoJs6 v6.7
数组操作
let arr = [3, 1, 4, 1, 5, 9];
arr.length; // 6
arr.push(2); // 末尾添加
arr.pop(); // 弹出末尾
arr.join(", "); // "3, 1, 4, 1, 5, 9"
arr.indexOf(5); // 4
arr.includes(7); // false
arr.sort((a, b) => a - b); // [1, 1, 2, 3, 4, 5, 9]
// 高阶函数
arr.filter(x => x > 3); // [4, 5, 9]
arr.map(x => x * 2); // [6, 2, 8, 2, 10, 18]
arr.reduce((sum, x) => sum + x, 0); // 总和
错误处理
try {
// 可能出错的代码
let file = open("/sdcard/nonexistent.txt");
} catch (e) {
console.error("发生错误: " + e.message);
} finally {
console.log("无论如何都会执行");
}
实战示例:登录流程
/**
* 登录自动化脚本示例
*/
function login(username, password) {
// 1. 打开目标应用
app.launchApp("目标应用");
sleep(1000);
// 2. 找到用户名输入框并填写
let usernameField = id("username").findOne(3000);
if (!usernameField) {
toast("未找到用户名输入框");
return false;
}
usernameField.setText(username);
// 3. 找到密码输入框并填写
let passwordField = id("password").findOne();
if (passwordField) {
passwordField.setText(password);
}
// 4. 点击登录按钮
let loginBtn = text("登录").findOne(2000);
if (loginBtn) {
loginBtn.click();
toast("已点击登录");
return true;
}
return false;
}
// 执行登录
let success = login("myuser", "mypassword");
console.log("登录结果: " + (success ? "成功" : "失败"));