有关Empty如何在VBScript中工作的确切细节

时间:2013-11-08 15:46:00

标签: vbscript

我是VBScript的新手,而且对以下代码的工作原理感到困惑:

set Adapters = GetObject("winmgmts:").InstancesOf("Win32_NetworkAdapterConfiguration")

for each Nic in Adapters
    if Nic.IPEnabled then
        MsgBox "IP Address: " & Nic.IPAddress(asdf), 4160, "IP Address"
    end if
next

当变量asdf未定义时,它可以工作。如果我将asdf定义为无效索引(例如-1或4),则会收到无效的索引错误。

我想:VBS中未定义的变量默认为0?不,我试图打印它,没有写任何东西。

将未定义变量作为数组索引传递返回数组中第一项记录的功能在哪里?在VBScript中编程时,我可能会遇到哪些其他相似的奇怪之处?

编辑:我发现的一些事情:

  • 默认情况下,未定义的变量在VBScript
  • 中等于Empty
  • Empty = 0是真的
  • Nic.IPAddress(Empty)也会返回数组的第一个元素
  • MsgBox 0将打印0,而MsgBox Empty将不打印任何内容

我仍然无法找到任何文档,说明数组索引通过返回第一个元素来悄悄地处理Empty,解释它为什么等效但是以不同于0的方式打印,以及其他构造处理{{1}参数(以及它们的结果)。

2 个答案:

答案 0 :(得分:2)

未定义的变量为Empty,返回数组的Empty索引也将返回0索引。

IPAddress数组中,有两个索引,01

因此,这将与您的代码具有相同的效果:
MsgBox "IP Address: " & Nic.IPAddress(0), 4160, "IP Address"

MsgBox "IP Address: " & Nic.IPAddress(Empty), 4160, "IP Address"

这将为您提供IPv6地址:
MsgBox "IP Address: " & Nic.IPAddress(1), 4160, "IP Address"

此外,这将返回数组的两个索引:
WScript.Echo Join(Nic.IPAddress,",")

另外,请考虑这个例子,
arr = Array("first","second","third")
WScript.Echo arr(Empty)

此处的输出为first

有关VBScript数据类型的信息,请参阅此文章:
“空:变量未初始化。数值变量的值为0或字符串变量的值为零长度的字符串(”“)。
http://msdn.microsoft.com/en-us/library/9e7a57cf(v=vs.84).aspx

答案 1 :(得分:0)

非常感谢Langstrom提供的服务: “空:变量未初始化。数值变量的值为0,字符串变量的值为零长度的字符串(”“)。”

清除:

Nic.IPAddress(asdf)将参数视为int,CInt(Empty)等于0,即数组第一个元素的索引。

MsgBox asdf将参数视为字符串,CStr(Empty)返回空字符串。

任何需要整数且0为有效值的函数与使用0参数调用时传递Empty的函数完全相同。

比较Empty = 0时,Empty被视为整数,因为它与整数进行比较,因此表达式为真。

比较Empty = "0"时,Empty被视为字符串,因此表达式为false。因此,Empty = ""是真的。

<强>空

另外,值得一提的是Null不等于任何东西,包括它自己。 Null = Null是假的。