函数调用的左侧赋值在 JScript 中如何工作?

How does this left hand side assignment for a function call work in JScript?

我正在寻找一种使用 JScript 记录安装程序日志消息的方法,偶然发现了这个答案:

How to debug an MSI Custom Action that is implemented in Javascript?

效果很好。但是,代码中有些有趣的地方我一直没弄明白。在这个方法中:

// spool an informational message into the MSI log, if it is enabled. 
function LogMessage(msg) {
    var record = Session.Installer.CreateRecord(0);
    record.StringData(0) = "CustomAction:: " + msg;
    Session.Message(MsgKind.Log, record);
}

从 syntax/semantic 的角度来看,record.StringData(0) = "CustomAction:: " + msg; 行是如何运作的?在我看来,这是在尝试为函数调用的 return 值分配一个值,这应该是非法的或者充其量是空操作?然而它起作用了,消息被打印在日志中。

我错过了什么?

它是一种 JScript 访问列表的方法,而不是实际的函数。因此它不会抛出 Invalid left-hand side in assignment.

StringData 是一个值列表。您实际设置的是 0 索引的值。这就像使用 arr[0] = 'xyz' 将值设置为数组。在您的示例中,您也可以省略它:

record.StringData = "CustomAction:: " + msg;

语法

propVal = Record.StringData
Record.StringData = propVal 

属性 值

记录中值的必填字段编号,从 1 开始。

备注

不存在的字段返回值为空字符串。要将记录字符串字段设置为空,请使用空变体或空字符串。尝试在不存在的字段中存储值会导致错误。

来源:Patrick