跳到主要内容

变量

rmmz中有“变量”这一概念,可以通过事件命令“变量操作”为其命名,自由地代入或累加数值。

相同的机制也存在于js中。

本章将从js变量与rmmz变量的区别,一直讲解到活用方法。

变量的声明

首先,与rmmz变量不同,js中需要“声明”变量。

声明就是告诉程序“我要用指定的名字定义一个变量”。

变量不声明就无法使用。

let aaa = 0;

上述例子中,声明了要使用名为“aaa”的变量,并同时赋值为0。

事件命令的变量一开始就含有0,但js变量如果不赋值,则什么也没有。

准确地说,里面存放的是表示“未定义”的特殊值undefined

let是为了声明而必需的、语法规定的写法。

let外,js中还有一些语法规定的写法或词语,这些被称为“保留字”。

而变量名“aaa”可以由你自由决定。但不能使用上述保留字或部分符号。

另外,重复定义同名的变量会报错。

Uncaught SyntaxError: Identifier 'aaa' has already been declared
备注

行尾的分号

仔细观察上面的脚本,最后面附有一个分号“;”。

这是为了明确表示语法结束的符号,但不加也能正常运行。

加不加取决于个人,都可以。

重要的是“保持统一感”。

时加时不加会招致混乱。

备注

关于let以外的变量声明方法

在旧作RPG Maker MV(以下简称MV)中使用过脚本的人,或许对保留字var有印象。

var也能像let一样声明变量。

在rmmz中也可以使用var声明,但这是稍旧的写法。

使用它虽然不会造成大的实际危害,但到了制作插件阶段,变量作用域(有效范围)等细微差异会变得明显。

如果没有特别的理由或坚持,请使用let

此外还存在另一个声明用的保留字const

你可能会想:“光是变量声明就弄出这么多种类,让人很困扰啊……”。

const在当前阶段难以解释,留待后述。

总之先记住let吧。

数值计算

在事件命令“变量操作”中,除了代入,加法和乘法等基本计算也是可能的。

js变量当然也能做到。

首先定义变量。

let x = 1;

然后分别如下描述。

种类脚本写法结果缩写版脚本
加法x = x + 1;2x += 1;
减法x = x - 1;0x -= 1;
乘法x = x * 2;2x *= 2;
除法x = x / 2;0.5x /= 2;
求余x = x % 2;1x %= 2;

这样计算结果就会被存入变量“x”。

console.log(x);来确认内容吧。

执行时使用“脚本”列还是“短缩版脚本”列都可以。

我想可以明白,可以用与事件命令相同的感觉来操作变量。

此外,当加、减的值为1时,还可以进一步缩短为如下形式。

x++;
x--;

这被称为递增运算符、递减运算符,在实际编程中也频繁使用。

备注

除法运算的两点注意

事件命令中执行除法时,若无法整除,会被向下取整。

但在js中,不会自动进行四舍五入或向下取整。

另外,关于除以0的行为:若被除数为正数,返回特殊值Infinity;若为负数,返回-Infinity

这种行为其实也可以在事件命令中再现。

变量的类型

事件命令的变量中只能放入“数值”。

但在js中,变量可以存储数值以外的值。

代表性类型如下:

  • 布尔值(true/false)
  • 字符串
  • null
  • undefined
  • 数组
  • 对象
  • 函数

布尔值(真/假)与事件命令中的“开关”相同。开关 ON 用 true 表示,开关 OFF 用 false 表示。

let aaa = true;

字符串是中文、日文、英语、符号等文字的排列。

字符串的开头和结尾用单引号 ' 或双引号 " 括起来。

let aaa = 'test mzあああ!"#$%';

null 表示“什么都没有的状态”。

它与之前提到的 undefined 概念相近,但 undefined 是“未定义任何东西”的状态,而 null 可以说是“定义了没有东西”的状态。

let aaa = null;

关于数组、对象、函数,因为较复杂,将在后面说明。

数组

在前项说明的变量类型中,“数组”和“对象”稍微复杂一些。

它们可以集中处理多个变量。

首先是数组,它是将值横向排列并统一处理的变量。

let aaa = [1, 2, 3, 4];

要引用其内容,如下记述。

console.log(aaa[0]);

括号中指定的 0 称为“索引”,用于指定引用数组中的哪个位置。

另外,里面存放的 12 等称为“元素”。

最左边元素的索引是 0,然后依次递增为 1, 2…

也就是说,执行上述脚本后,会显示第 0 个元素 1

另外,在数组后面加上 .length 可以获取数组的元素个数。

console.log(aaa.length);

对象

数组是以数值为索引来汇总多个变量。

另一方面,以字符串为索引的就是“对象”。

这接近于其他语言中的“关联数组”或“结构体”。

(严格来说略有不同,js 中另有正式的关联数组,但此处省略说明)

let aaa = {bbb:1, ccc: 2, ddd: 3};

数组中使用“索引”一词,而对于对象,bbbccc 等通常称为“属性”。

与数组类似,引用时如下记述。

因为是字符串,不要忘记前后加上单引号。

console.log(aaa['bbb']);

上述结果返回 1

此外,对于对象,还可以进行如下引用。

console.log(aaa.bbb);

这种情况下不需要括号和单引号,但属性名中不能使用符号(除下划线等部分符号外)。

这种使用 . 的属性引用,在核心脚本中也频繁使用。

请在这里牢固掌握基础。

aaa.bbb 的意思是引用对象 aaa 的属性 bbb

应用篇

现在使用已学的知识尝试运行复杂的程序。请确认自己是否真正理解了内容。

请尝试执行以下脚本。但请尽量不要复制,而是亲自逐字输入。

let obj = {prop1:0, prop2:1};
obj.prop1 += obj.prop2;
let propName = 'prop3';
obj[propName] = 5;
let num = obj.prop3;
console.log(obj.prop1 + obj.prop2 / num);

逐行解释如下。

  1. 声明变量 obj,并存入新创建的对象。
  2. obj 的属性 prop2 的值加到属性 prop1 上。prop1 中存入 0 + 1,即 1
  3. 声明变量 propName,存入字符串 prop3
  4. 为变量 obj 创建新属性。属性名是“变量 propName 的值”,即 prop3
  5. 将前一行定义的 obj.prop3 赋值给变量 num。因此 num 中存入 5
  6. 最后输出 prop1 + prop2 / num 的计算结果。可以像现实数学一样组合多个运算。

首先值得一提的是第 4 行。

这里在属性中指定了变量。

在 js 中,引用属性时可以基于“变量的值”来进行引用。

这个技巧将来会派上用场。

其次是第 6 行。

在事件命令中,一个命令只能执行一个计算。

而在 js 中,与现实数学一样,可以在一个语法内进行多个计算。

顺便问一下,您是否记得数学中运算有优先级?

加法和乘法中,乘法优先计算。

因此结果是 1 + 1 / 5,输出 1.2

备注

关于输入补全

当手动输入上述脚本时,输入到第 2 行的 obj 时,我想会弹出如下所示的列表。

这称为“输入补全”,是开发者工具预测您将要输入的内容并给出候选的功能。

通过此功能可以减少输入错误和语法错误,请善加利用。

img