Использование оператора + в различных ситуациях в VBScript
Что такое значение ниже в VBScript
1)x=1+"1"
2)x="1"+"1"
3)x=1+"mulla"
Примечание. Во всех трех приведенных выше случаях я использую первую переменную как строку или целое число, а вторую - всегда как строку.
Случай 1: Действует как числовое и автоматическое преобразование в числовое во время работы
enter code here
y=inputbox("Enter a numeric value","") Rem I am using 1 as input
x=1
msgbox x+y Rem value is 2
msgbox x*y Rem value is 1
Случай 2: действует как строка и не преобразуется в числовое значение во время работы.
enter code here
y=inputbox("Enter a numeric value","") Rem I am using 1 as input
x=1
if y= x then
msgbox "pass"
else
msgbox "fail"
end if
Случай 3: Действуя как строка и явное преобразование в числовое значение во время операции, она проходит
enter code here
y=inputbox("Enter a numeric value","") Rem I am using 1 as input
x=1
if Cint(y) = x then
msgbox "pass"
else
msgbox "fail"
end if
Мне нужна логическая причина для различного поведения. но на другом языке это прямо и будет работать, как ожидалось
2 ответа
Я согласен с большей частью того, что сказал @thomas-inzina , но ОП попросил более подробное объяснение, так что здесь идет.
Как @ Томас-Инзина указывает на использование +
опасно при работе со строками и может привести к неоднозначности в зависимости от того, как вы комбинируете различные значения.
VBScript - это язык сценариев, и, в отличие от его старших братьев (VB, VBA и VB.Net), он только без типов (некоторые споры о том, что VB и VBA также могут быть без типов, но это совершенно другая тема), что означает, что он использует один тип данных, известный как Variant
, Variant
может выводить другие типы данных, такие как Integer
, String
, DateTime
и т.д., где может возникнуть неоднозначность.
Это означает, что вы можете получить неожиданное поведение при использовании +
вместо &
как +
является не только оператором конкатенации при использовании со строками, но и оператором сложения при работе с числовыми типами данных.
Dim x: x = 1
Dim y: y = "1"
WScript.Echo x + y
Выход:
2
Dim x: x = "1"
Dim y: y = "1"
WScript.Echo x + y
Выход:
11
Dim x: x = 1
Dim y: y = 1
WScript.Echo x + y
Выход:
2
Dim x: x = 1
Dim y: y = "a"
WScript.Echo x + y
Выход:
Microsoft VBScript runtime error (4, 5) : Type mismatch: '[string: "a"]'
Ссылка: Оператор сложения (+) (VBScript)
Хотя вы также можете использовать оператор + для объединения двухсимвольных строк, вы должны использовать оператор & для объединения, чтобы устранить неоднозначность. При использовании оператора + вы не сможете определить, произойдет ли добавление или конкатенация строк. Тип выражений определяет поведение оператора + следующим образом:
Если оба выражения являются числовыми, то результатом является сложение обоих чисел.
Если оба выражения являются строками, то результатом является объединение обеих строк.
Если одно выражение является числовым, а другое является строкой, тогда Error: type mismatch
будет брошен.
При работе со смешанными типами данных лучше всего преобразовывать ваши переменные в общий тип данных, используя функцию преобразования типов.