函数调用的左侧赋值在 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
我正在寻找一种使用 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