2016-07-29 39 views
3

In ASP ist eine nicht initialisierte Session-Variable leer. Ich weiß, dass der richtige Weg für einen Session-Wert zu überprüfen und einen Wert entfernen, ist die folgende:ASP Sitzungsvariablen: Ist "" dasselbe wie IsEmpty?

IF NOT IsEmpty(Session("myVar")) THEN 
    ' Go ahead and use Session("myVar") 
    ... 
    ' Now if we're all done with myVar then remove it: 
    Session.Contents.Remove("myVar") 
END IF 

Ich habe eine Codebase geerbt wo Anwendungs- und Session-Variablen werden in der Regel = "" nach Gebrauch gesetzt, und alle Tests für einen Wert sind die Form (Sessions("myVar") = ""). Dieser Test erscheint zu arbeiten, wenn die Session-Variable nicht deklariert wurde ... oder vielleicht funktioniert es nur durch dummes Glück.

Ist es sicher, einen Vergleich mit der leeren Zeichenfolge zu verwenden, um eine Session-Variable zu testen? Das heißt, ist das Folgende "praktisch so gut" wie die oben gezeigte korrekte Methode?

IF Session("myVar") <> "" THEN 
    ' Go ahead and use Session("myVar") 
    ... 
    ' Now if we're all done with myVar then blank it: 
    Session("myVar") = "" 
END IF 

Oder sollte ich Refactoring den Code-Basis, so dass:

  1. Alle Tests, um zu bestimmen, ob eine Session-Variable gesetzt wurde von der Form sind IsEmpty(Session("myVar"))
  2. Alle Session-Variablen Remove d sind und nicht Set = ""?

Antwort

1

Empty ist ein seltsames Tier: es gleichzeitig gleich ist sowohl auf "" und 0. Ernsthaft, versuchen Sie es:

dim x, y, z 
x = Empty 
y = "" 
z = 0 
Response.Write (x = y) AND (x = z) 

Es wird "True" ausschreiben. Diese

bedeutet, daß die Prüfung auf Not IsEmpty(myvar) dem Test entspricht myvar <> "", aber IsEmpty(myvar) ist nicht entspricht myvar = "". Ob diese meist theoretische Differenz Sie stört oder nicht, können Sie nur beantworten, aber persönlich würde ich keine Zeit mit Refactoring verschwenden.


Wenn Sie Refactoring tun entscheiden, würde ich mich über IsEmpty und IsNull und so weiter empfehlen, zu vergessen, und nur mit dem & "" "Hack":

If Session("myvar") & "" <> "" Then 

Diese transparent Nulls behandeln werde und Leere, ohne dass du eine ganze Menge Code schreiben musst.

+1

Ich neige dazu, mit 'IsEmpty()' zu vermeiden und stattdessen für 'Len (Wert & "")> 0 'entscheiden. – Lankymart

+0

@Lankymart - Ja, ich sehe eine Menge "Wert &" "' zum Schutz vor Fällen, in denen "Wert" nicht definiert sein könnte. – feetwet

0

Nein, es könnte nicht sicher sein. Vielleicht brauchen Sie Funktionen verwenden: IsNull, IsEmpty und VarType

IsNull - gibt True zurück, wenn Ausdruck Null ist, das heißt, es keine gültige Daten enthält; Andernfalls gibt IsNull False zurück. Wenn Ausdruck aus mehr als einer Variablen besteht, bewirkt Null in einer konstituierenden Variablen, dass True für den gesamten Ausdruck zurückgegeben wird.

VarType - Gibt einen Wert zurück, der den Subtyp einer Variablen angibt.

IsEmpty - gibt True zurück, wenn die Variable nicht initialisiert ist oder explizit auf Empty gesetzt ist; Andernfalls wird False zurückgegeben. False wird immer zurückgegeben, wenn der Ausdruck mehr als eine Variable enthält.

Bitte nehmen Sie sich einen Blick auf What is the '<>' asp operator?