Рассмотрим следующий бит VBS:
dim msg, myVar, myVar2
msg = "myVar = " & myVar
msg = msg & vbcrlf & "myVar = empty: " & isempty(myVar)
msg = msg & vbcrlf & "TypeName(myVar) = " & TypeName(myVar)
msgbox msg, , "BEFORE"
if not myVar then myVar2 = true
msg = "myVar = " & myVar
msg = msg & vbcrlf & "myVar = empty: " & isempty(myVar)
msg = msg & vbcrlf & "TypeName(myVar) = " & TypeName(myVar)
msgbox msg, , "AFTER"
Я ожидаю, что результат от "ПЕРЕД" и "ПОСЛЕ" будет таким же... все, что мы делаем, делает сравнение с неинициализированным (пустым) вариантом справа?
Однако - кажется, что "если нет" фактически инициализирует его (длинный) ноль! Я кодировал в VBS (ASP) для осла лет, и это новое на меня!
Несколько замечаний:
- Поведение одинаково как в .vbs, так и в эквивалентном ASP-коде (на моем рабочем столе Win 7 и на сервере 2008 R2).
- Все логические операторы - и/или/не/xor производят этот эффект
- Операторы сравнения не делают.
Кажется, это потенциальная ловушка для неосторожного... Может ли кто-нибудь объяснить это поведение?