You need to enable JavaScript to run this app. VBScript的VarType函数返回值15、16分别代表什么类型?
优惠活动
大模型
产品
解决方案
定价
更多

VBScript的VarType函数返回值15、16分别代表什么类型?

问题解答

两个缺失编号的真实定义

VBScript的VarType函数本身没有独立的类型编码体系,所有返回值完全直接复用COM规范中VARIANT结构的类型标记位。对照枚举规则,常规返回序列中缺失的十进制15、16两个编号的对应定义如下:

  • 十进制15(十六进制0x000F):从第一版OLE Automation规范开始,这个位置就是设计时主动预留的空号,从来没有被分配给任何公开的变量类型,不存在可对应实际数据的类型定义。
  • 十进制16(十六进制0x0010):正式枚举值为VT_I1,表示有符号1字节整型字符类型。

VarType函数不返回这两个值的原因

  • 对于编号15:因为本身就是规范设计时跳过去的预留空位,没有实际绑定的类型,自然不会出现在函数的返回结果中。早期设计类型枚举时,在排布完0-14的15个核心类型后,为了给后续扩展留足内存对齐空间,特意跳过了0x0F的位置,这个设计从VBScript 1.0版本发布后就没有改动过。
  • 对于编号16(VT_I1):虽然这是COM规范定义的正式类型,但VBScript的原生语言体系完全不支持这种有符号1字节整型。作为轻量化的脚本语言,VBScript只保留了和早期VB6兼容的核心类型集合,对于COM规范后续新增的原生类型,只筛选了少量适配的类型纳入支持范围:比如把同属1字节范畴的无符号1字节类型VT_UI1(十进制17)纳入支持,这也是为什么VarType能返回17的原因;但VT_I1没有被纳入支持列表,哪怕脚本引擎从其他COM组件收到了这个类型的传入值,也会在内部强制转换为VBScript通用的4字节整型(对应返回值3),永远不会把原始的VT_I1标记值透传给调用方。

追溯定义的路径

不需要寻找未公开的早期VBScript编译版本,直接顺着底层依赖的规范链路即可找到完整来源:

  • 回溯VBScript 1.0版本最早依赖的1993年版OLE 2.1 Automation规范,就能找到编号跳位的原始设计:规范里的类型列表在排完VT_DECIMAL(编号14)后,直接跳到VT_I1(编号16),空出的15号位置没有绑定任何类型。
  • 要理解为什么VT_I1没有被VarType返回,只需要对照VBScript官方文档列出的原生支持类型集合:整个语言的语法设计从来没有提供有符号1字节整型的声明方式,脚本引擎的类型校验层会对所有传入的非原生类型值做强制转换,因此不会直接透传这个类型标记。

内容的提问来源于stack exchange,提问作者mnemotronic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 20:15:03