VBScript/Classic ASP - 如何在不抛出错误的情况下检查对象中是否存在属性

Lev*_*ith 11 asp-classic

示例代码:

Dim myObject
Set myObject = JSON.parse(someJsonResponseFromTheServer)    

myFunction(myObject.someProperty)
Run Code Online (Sandbox Code Playgroud)

问题:

当代码类同这在我的应用程序运行,它抛出一个500.从类似"对象不支持属性或方法'someProperty’消息服务器错误我想这样做来解决这个问题是这样的:

Dim myObject
Set myObject = JSON.parse(someJsonResponseFromTheServer)    

If myObject.someProperty Then
    myFunction(myObject.someProperty)
End If
Run Code Online (Sandbox Code Playgroud)

但是,如果我添加条件,它会在条件而不是方法调用的行上抛出相同的错误.

我的问题:

在ASP Classic中,如何在不抛出错误的情况下检测对象中是否存在属性?

Sha*_*ard 16

经典ASP的一个好处是它允许您在同一页面中运行VBScript和JScript - 因此您可以使用两者的强大功能.

首先,将此JScript代码块添加到现有.asp文件中:

<script language="JScript" runat="server">
function CheckProperty(obj, propName) {
    return (typeof obj[propName] != "undefined");
}
</script>
Run Code Online (Sandbox Code Playgroud)

假设VBScript是页面中的默认语言,您可以在VBScript代码中调用它,如下所示:

Dim myObject
Set myObject = JSON.parse(someJsonResponseFromTheServer)    
If CheckProperty(myObject, "someProperty") Then
    myFunction(myObject.someProperty)
End If
Run Code Online (Sandbox Code Playgroud)

使用泛型类对象测试它并且它工作正常 - JScript在VBScript之前编译,因此可以访问它.


Lyn*_*ing 7

可悲的是,这通常意味着"错误"声明.

Private Function TestProperty()
    Dim Success
    Success = False

    On Error Resume Next
        ' set for property here
        Success = (Err.Number = 0)
    On Error Goto 0
    TestProperty = Success
Exit Function   
Run Code Online (Sandbox Code Playgroud)


Ant*_*nes 5

假设您包含一些为您提供 JSON 解析器的 runat="server" js 文件,那么JSON.parse它将返回一个 Javascript 对象。

如果上述假设是正确的,那么以下应该有效:

If myObject.hasOwnProperty("someProperty") Then 
    myFunction(myObject.someProperty) 
End If 
Run Code Online (Sandbox Code Playgroud)