WIA.Vector通过Enumerator返回一些不是数字的东西

时间:2018-02-13 00:59:58

标签: javascript activex jscript wia

使用向量Vector object或使用默认属性直接访问WIA Item property的成员时,JScript会将其视为数字:

var v = new ActiveXObject('WIA.Vector');
v.SetFromString('This is a test', true, false);
for (var i = 1; i<= v.Count; i+=1) {
    WScript.Echo(String.fromCharCode(v(i)));
}

但是,如果我使用Enumerator来遍历 Vector

var enumerator = new Enumerator(v);
enumerator.moveFirst();
while (!enumerator.atEnd()) {
    WScript.Echo(String.fromCharCode(enumerator.item()));
    enumerator.moveNext();
}

我在WScript / CScript下遇到以下错误:

  

enumerator.item()不是数字

typeof返回unknown

WScript.Echo(typeof enumerator.item());

大概是某种类型的自动化类型(如this question中所示)只显示为数字,这就是typeof返回unknown的原因。

如何将此值强制转换为“真正的”Javascript号码?

更新

VBA中的以下代码:

Dim v As New Vector, item As Variant
v.SetFromString "This is a test", True, False
For Each item In v
    Debug.Print TypeName(item)
Next

打印

  

字节
  字节
  ...

因此问题可以缩小到 Byte 特定的自动化类型。

1 个答案:

答案 0 :(得分:0)

它适用于IE11的控制台。 (你在while循环中有错误)

代码:

- Vector -
84 T number
104 h number
105 i number
115 s number
32   number
105 i number
115 s number
32   number
97 a number
32   number
116 t number
101 e number
115 s number
116 t number
0  number
- Enumerator -
84 T number
104 h number
105 i number
115 s number
32   number
105 i number
115 s number
32   number
97 a number
32   number
116 t number
101 e number
115 s number
116 t number
0  number

将打印到控制台:

{{1}}