2016-07-29 3 views
3

В ASP неинициализированная переменная сеанса Empty. Я знаю, что правильный способ проверить значение сеанса, и удалить значение, заключается в следующем:ASP-переменные сеанса: «То же, что и 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 

Я унаследовал кодовую где приложения и переменные сессии, как правило, набор = "" после использования, и все тесты для значения имеют вид (Sessions("myVar") = ""). Этот тест появляется, чтобы работать, когда переменная Session не была объявлена ​​... или, может быть, она просто работает от немой удачи.

Можно ли использовать сравнение с пустой строкой для проверки переменной сеанса? I.e., является следующим «практически столь же хорошим», как и правильный метод, показанный выше?

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 

Или я должен реорганизовать кодовую так, что:

  1. Все тесты, чтобы определить, был ли установлен переменная Session имеют вид IsEmpty(Session("myVar"))
  2. Все переменные сессии являются Remove d и не set = ""?

ответ

1

Empty странное животное: оно одновременно равно как и ""0. Серьезно, попробуйте:

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

Он выпишет «Правда».

Это означает, что тестирование на Not IsEmpty(myvar) эквивалентно тестированию myvar <> "", но IsEmpty(myvar) является не эквивалентно myvar = "". Является ли это в основном теоретическим различием вас или нет, вы только можете ответить, но лично я не буду тратить время на рефакторинг.


Если вы сделать решили реорганизовать, я хотел бы предложить забыть о IsEmpty и IsNull и этажерку, и только с помощью & "" "взломать":

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

Это будет прозрачно обрабатывать NULLS и Пустышки без необходимости писать целую кучу кода.

+1

Я склонен избегать использования 'IsEmpty()' и выбрать вместо этого для 'Len (значение & "")> 0 '. – Lankymart

+0

@ Lankymart - Да, я вижу много «значение &» «для защиты от случаев, когда« значение »может быть неопределенным. – feetwet

0

Нет, это может быть небезопасно. Возможно, вам нужно использовать функции: IsNull, IsEmpty и VarType

IsNull - возвращает TRUE, если выражение Null, то есть, он не содержит достоверных данных; в противном случае IsNull возвращает False. Если выражение состоит из более одной переменной, то Null в любой составляющей переменной приводит к возврату True для всего выражения.

VarType - возвращает значение, указывающее подтип переменной.

IsEmpty - возвращает значение True, если переменная неинициализирована или явно установлен в Empty; в противном случае он возвращает False. False всегда возвращается , если выражение содержит более одной переменной.

Пожалуйста, обратите внимание на What is the '<>' asp operator?

Смежные вопросы