使用vbscript在asp中真正的Collection对象是什么?

时间:2017-05-21 06:02:41

标签: vbscript asp-classic

该集合在VBScript中与Dictionary有共同之处,但它们不是一回事。

Collection是 Session.Contents 属性等对象。

Dictionary是使用以下代码创建的对象。

Dim dictObj
Set dictObj = CreateObject("Scripting.Dictionary")

我想找到这两个类型对象的差异和公共,以便知道如何使用它们。

我找到了这些有用的文章,但仍然没有清楚地理解使用VBScript在asp中真正的集合。

  

Working with Collections

     

Using the Dictionary Class in VBA

我的问题是:

  1. VBScript中是否没有Collection数据类型?你可以创建一个字典,但不能创建一个集合对象。

  2. 使用For Each循环遍历集合时, x 是什么,集合的关键或集合项值?

    for each x in Session.Contents
    
  3. 为什么你这样使用收藏?

    Session("FirstName")
    

    相同
    Session.Contents("FirstName")
    
  4. 收集对象的文档是什么?

    我能找到的字典文档是this

  5. 我可能误解了收集对象,所以请告诉我。非常感谢你。

1 个答案:

答案 0 :(得分:7)

  

VBScript中是否没有Collection数据类型?

正确。没有内置的Collection数据类型。它存在于VB中,但VBScript没有它。您可以在VBS中处理现有对象上的集合,但无法创建新集合。使用Scripting.Dictionary,它提供相同的功能。

  

使用For Each循环遍历集合时,x,集合的关键字或集合项值是什么?

For Each循环总是为您提供类似集合对象的键。然后,您可以使用该键来访问该值。 (如果它给了你相反的值,就没有办法在for-each循环中找到密钥,即你不知道这个值意味着什么。)

Dim key, val

For Each key In Session.Contents
    val = Session(key)
    Response.Write Server.HtmlEncode(key) & " = " & Server.HtmlEncode(val) & "<br>"
Next
  

为什么你这样使用收藏?

Session("FirstName")

因为Session对象的默认属性Contents集合。并且集合对象的默认属性是Item

默认属性是在您不在代码中命名属性但仍在对象上使用括号时调用的属性。

因此这些实际上是相同的:

Session("FirstName") = "Foo"
Response.Write( Session("FirstName") & "<br>" )

Session.Contents("FirstName") = "Bar"
Response.Write( Session.Contents("FirstName") & "<br>" )

Session.Contents.Item("FirstName") = "Baz"
Response.Write( Session.Contents.Item("FirstName") & "<br>" )

最后一个变体是实际发生的,而另外两个变体是语法糖。 Session.Contents集合基于常规集合,但有一些额外的魔力。例如,访问丢失的密钥不会引发错误。

  

收集对象的文档是什么?

微软在放弃VB 6.0文档方面做得非常出色,但也无法找到遗留下来的东西。最接近的是Collection Object in Office VBA的文档。

否则会有IIS Session object的文档,它适用于经典ASP。相关:Storing and Removing Data from the ASP Session Object