124

I have a framework written in VBScript. Inside some function in this framework parameter of the function is checked for Nothing in If statement and then some actions executed. Code that uses framework written in Javascript. So I need to pass Nothing to function to perform some actions. In IE8 and earlier versions worked next approach:

<script type="text/vbscript">
    Function Test(val)
        If (IsNull(val)) Then
            Test = "Null"
        ElseIf (IsObject(val)) Then
            If (val Is Nothing) Then
                Test = "Nothing"
            End If
        End If
    End Function

    Dim jsNothing
    Set jsNothing = Nothing
    msgBox(Test(jsNothing))
    msgBox(Test(Null))
</script>


<script type="text/javascript">
    alert(Test(jsNothing));
</script>

In IE < 9 output will: Nothing, Null, Nothing.

In IE9: Nothing, Null, Null.

How can I pass Nothing from Javascript to VBScript in IE9?

Sorry, I know it's ugly, but I'm trapped. And hate VBScript.

edit: There is an example of framework function. I can not change it because it is widely used in application.

Function ExampleFunction(val)
    If (val Is Nothing) Then
        ExampleFunction = 1
    Else
        ExampleFunction = 0
    End If
End Function

Update

Quit job. Found a better one.

michaelsnowden
  • 5,532
  • 2
  • 32
  • 72
mixel
  • 22,724
  • 10
  • 111
  • 154
  • 10
    Small sidenote: VBScript [doesn't have short-circuited logical operators](http://msdn.microsoft.com/en-us/library/e8zy95hw%28v=VS.85%29.aspx), so the statement `IsObject(val) And val Is Nothing` will still result in an error. You'll have to split it into a nested If. – Cheran Shunmugavel Sep 28 '11 at 07:38
  • I closed this out as too localized for you. In the future, you can just flag to let us know :) – Tim Post Feb 21 '12 at 11:54
  • Does VBScript have And Also? I know VB.Net has it. As lame as that is, at least it will allow for short-circuiting. – vbullinger Feb 21 '12 at 22:12
  • @vbullinger: No, it has not lazy logic. http://blogs.msdn.com/b/ericlippert/archive/2004/07/15/184431.aspx -Eric Lippert's article. – mixel Feb 22 '12 at 05:45

4 Answers4

17

Unfortunately, you are probably stuck here - JavaScript does not have a "Nothing" equivalent. See This Article for more information.

[Edit] However, the following may work. In your VBScript create a function called "GetNothing" that returns "Nothing". In your JavaScript use "var jsNothing = GetNothing()". Comes from this article

Pandelon
  • 527
  • 6
  • 15
4

This question is fascinating, I thought I'd try and answer it just for the fun of it.

(Congrats to mixel on getting a better job!)

I don't have access to IE right now, so I can't test this, but what if you tried writing a function like this:

<script type="text/vbscript">
  Function CallWithNulls(fn, arg1, arg2, arg3)
    If (isNull(arg1)) arg1 = Nothing
    If (isNull(arg2)) arg2 = Nothing
    If (isNull(arg3)) arg3 = Nothing
    fn(arg1, arg2, arg3)
  End Function
  Function IsNothing(arg1, arg2, arg3)
     return arg1 is Nothing
  End Function
</script>
<script type="text/javascript">
  alert(CallWithNulls(IsNothing, null, 1, 2));
</script>

Of course I don't know if VB script allows calling functions like that... and you'd have to deal with more/fewer arguments.

cwohlman
  • 753
  • 5
  • 20
  • It's a nice workaround. But this question is already 3 years dead. And I wish VBScript to be dead too :-) Thank's for effort and catch the upvote. – mixel Oct 24 '14 at 18:18
  • I wasn't trying to fix the problem (since I saw you'd already found a better solution), it was just an interesting question and I thought I'd give it a stab. Thanks for the upvote! – cwohlman Oct 24 '14 at 21:39
  • VBScript continues to be the scripting engine that powers some of HP's products, so it indeed should not die. Yet. – TheBlastOne Jul 17 '16 at 09:28
0

As an example, something like this will work but if the browser is IE11 or later you will need the 'meta' tag.

<HTML>
<HEAD>
<meta http-equiv="x-ua-compatible" content="IE=10">
<TITLE>Pass Javscript to VBScript</TITLE>

<script>
    var val = "null";

    window.alert("Test: " +  val);
</script>

<script type="text/vbscript">

    PassNothing(val)


    Sub PassNothing(value)
        If LCase(value) = "null" Then
            MsgBox "Java passed 'null' so VBScript = 'Nothing'"
        Else
            Msgbox "Nothing received"
        End If
    End Sub

    </script>

</HEAD>
</HTML>
0

Use a value such as zero or even a negative number that would allow for you simply use falsy evaluations, then you don't have to worry about different browsers and their quirks in evaluating the NULL object.

  • 1
    Thanks for an answer but problem is in framework. It was written long ago and is used widely in large application and I can not change just it. I added to question example of a function of framework that called from javascript. – mixel Sep 28 '11 at 08:25