Javascript 数组到 VBScript

Javascript array to VBScript

我有一个使用 Javascript 构建的对象数组,我需要使用 VBScript 读取它(如下例所示)。我找不到在我的 VbScript 代码中将数组作为 myArray 对象循环的方法。

这个例子是我的问题的简化。我无法更改页面的默认语言。 myArray 对象必须使用 javascript 构建。必须使用内联 vbscript 输出数组。

<%@ Language="VBScript" %>

<script language="javascript" runat="server">

    var myArray = [
        {
            name: "object 1"
        },
        {
            name: "object 2"
        },
        {
            name: "object 3"
        }
    ];

</script>

<%
    Response.Write(myArray) ' [object Object],[object Object],[object Object]
    'Response.Write(myArray(0)) ' ERROR
    'Response.Write(myArray[0]) ' ERROR
    Response.Write(myArray.[0]) ' [object Object]
    Response.Write(myArray.[0].name) ' object 1
    Response.Write(VarType(myArray)) ' 8
    Response.Write(myArray.length) ' 3
    Response.Write(VarType(myArray.[0])) ' 8
    Response.Write(VarType(myArray.[0].name)) ' 8
    Response.Write(TypeName(myArray)) ' JScriptTypeInfo
    Response.Write(TypeName(myArray.[0])) ' JScriptTypeInfo

    ' ERROR
    ' Type mismatch: 'UBound'
    'Response.Write(UBound(myArray))

    ' ERROR
    ' Object doesn't support this property or method: 'myArray.i'
    'Dim i
    'For i = 0 To myArray.length - 1
    '    Response.Write(myArray.[i])
    'Next
%>

不要使用数组。使用如下字典对象。

<%@ Language="VBScript" %>

<script language="javascript" runat="server">

    var myArray = [
        {
            name: "object 1"
        },
        {
            name: "object 2"
        },
        {
            name: "object 3"
        }
    ];

    var myDictionary = Server.CreateObject("Scripting.Dictionary");

    for (var myArrayIndex = 0; myArrayIndex < myArray.length; myArrayIndex++) {
        myDictionary.Add(myArrayIndex, myArray[myArrayIndex]);
    }

</script>

<%
    Dim i
    For i = 0 To UBound(myDictionary.Keys)
        Response.Write(myDictionary.Item(i).name)
    Next
%>

看来 JScript 数组方法仍然可以通过 VBScript 使用:

<script language="javascript" runat="server">
    var myArray = [
        {
            name: "object 1"
        },
        {
            name: "object 2"
        },
        {
            name: "object 3"
        }
    ];
</script>

<%
    Do While myArray.length > 0
        response.write myArray.shift().name
        response.write "<br>"
    Loop
%>

您可以将打印委托给 JScript 函数:

<%@ Language="VBScript" %>
<script language="javascript" runat="server">
    var myArray = [
        {
            name: "object 1"
        },
        {
            name: "object 2"
        },
        {
            name: "object 3"
        }
    ];
</script>

<%
    '// vbscript
    Response.Write(TypeName(myArray)) ' JScriptTypeInfo

    Response.Write printArr(myArray)

    '// more vbscript
%>

<script language="javascript" runat="server">
    function printArr(arr) 
    {
        for (var i = 0; i < myArray.length; i++)
        {
            Response.Write("<br />index " + i + " = " + myArray[i].name);
        }
    }
</script>

晚会有点晚了,但您可以向标准 javascript 数组添加自定义方法。此方法也将在 VBscript 中可用。 所以将此代码添加到您的脚本中:

// add an Item() method to the standard array object so we can iterate arrays in VBscript.
Array.prototype.Item = function(idx) {
    return this[idx];
};

你可以使用:

myArray.Item(0)

在 VBscript 中获取数组中的一项。

HTH