---
title: "Dictionary-object i funktioner? Funkar inte?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/67749-dictionary-object-i-funktioner-funkar-inte"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Stahre"
published: "2003-02-10T07:45:24.000Z"
updated: "2003-02-10T09:49:37.000Z"
replies: 5
views: 210
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/67749-dictionary-object-i-funktioner-funkar-inte"
---

# Dictionary-object i funktioner? Funkar inte?

## #1 — Stahre, 2003-02-10T07:45Z

Dethär är mitt första inlägg i dethär forumet så jag hoppas att jag inte gör bort mig helt. :)

I helgen så råkade jag ut för ett lite konstigt beteende i ASP.

Jag försökte skicka in ett dictionary-object i en funktion men det blev lite fel... Det gick nämligen inte att använda Exists() om jag inte hade läst ut ett värde från arrayen(?)!.

Tror exemplet nedan förklarar bättre, den \_borde\_ skriva ut:

This is a test1.
This is a test2.

men i alla fall på den servern jag jobbar mot så får jag:

Nope1.
This is a test2.

Snälla! Hjälp mig någon! Förklara vad som händer. För jag blir galen snart. :)   (Går iofs att programmera runt problemet men det känns inte så bra att behöva göra det.)

\<%
Function test1(foo)
	If (foo.Exists("yow")) Then
		test1 = "This is test1.\<BR\>"	
	Else
		test1 = "Nope1.\<BR\>"
	End If
End Function

Function test2(foo)
	i = foo.Item("yow")
	If (foo.Exists("yow")) Then
		test2 = "This is test2.\<BR\>"	
	Else
		test2 = "Nope2.\<BR\>"
	End If
End Function

Set bar = CreateObject("Scripting.Dictionary")

Response.Write test1(bar)
Response.Write test2(bar)

Set bar = Nothing
%\>

Permalänk: https://www.webforum.nu/p/67749

## #2 — niko, 2003-02-10T08:41Z

Jag hänger inte med riktigt ..

Eftersom du aldrig gör: *bar.add "yow","whatever"* så borde du väl egentligen förvänta dig:

Nope1.
Nope2.

, eller hur?

Anledningen till att **test2** trots allt returnerar *This is test2.* är att *i = foo.Item("yow")* , i själva verket, skapar ett nytt (tomt) element.

> If key is not found when attempting to return an existing item, a new key is created and its corresponding item is left empty.

Källa: <http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/jsproitem.asp>

Permalänk: https://www.webforum.nu/p/944785

## #3 — Stahre, 2003-02-10T09:01Z

Doh... =)

Hm. Då får jag börja leta fel igen.

Fast lite förvirrande är det ändå när den skapar saker bara för att man söker efter dom. :)

"Jag tänker på den, alltså existerar den." ?

Permalänk: https://www.webforum.nu/p/944798

## #4 — niko, 2003-02-10T09:13Z

> Varför börjar den existera efter att jag hämtat den?

Tja, därför att Microsoft bestämt att det ska funka så ..?

Det brukar ju ofta vara så i script-språk att saker skapas när man referar till dom.

Att kunna skriva bara:

```
bar.Item("minNyckel")="mittvärde"
```

.. är ju smidigare än att behöva göra:

```
if not bar.Exists("minNyckel") then
	bar.add "minNyckel","mittvärde"
else
	bar.Item("minNyckel")="mittvärde"
end if
```

Permalänk: https://www.webforum.nu/p/944807

## #5 — Stahre, 2003-02-10T09:37Z

Får tacka för svaret  :) Hade nog inte hittat det egentliga felet utan det.

Jag hade blandat siffror och strängar. :)

Dvs.

foo.Item(1)  är inte samma som  foo.Item("1")

Men sen så måste jag ändå få klaga lite på Microsoft... Jag vet inget annat språk där element skapas i en array bara för att man refererar dom.

foo.Item("banan") = "Hej"

...är en helt annan sak än...

hej = foo.Item("banan")

Permalänk: https://www.webforum.nu/p/944818

## #6 — niko, 2003-02-10T09:49Z

> foo.Item("banan") = "Hej" 
> 
> ...är en helt annan sak än... 
> 
> hej = foo.Item("banan")

Kan bara hålla med. Men eftersom VBScript har nästan obefintlig felhantering så tycker
nog Microsoft att det är enklare att foo.Item("banan") skapar ett element och returnerar
en tom sträng om "banan" inte finns, snarare än att tvinga programmerare att hela tiden skriva:

```
if foo.Exists("banan") then
	hej = foo.Item("banan")
else
	hej = "" 'Eller nåt annat.
end if
```

Permalänk: https://www.webforum.nu/p/944827

---

Tråden på webben: https://www.webforum.nu/amne/asp/67749-dictionary-object-i-funktioner-funkar-inte
