AutoJs6 中文文档 下载 App

变量、函数与控制流 — 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 ? "成功" : "失败"));