Использование оператора + в различных ситуациях в 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 будет брошен.

При работе со смешанными типами данных лучше всего преобразовывать ваши переменные в общий тип данных, используя функцию преобразования типов.

Другие вопросы по тегам