2016-07-20 21 views
1

什麼是下面的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-inzinahas saidOP has asked for a more detailed explanation所以在這裏。

由於使用+@thomas-inzina點的出處理字符串,並可能導致歧義取決於你如何結合不同的值時,是很危險的。

VBScript是一種腳本語言,不像它的大哥哥(VB,VBA和VB.Net)這是無類型(約VB和VBA也能夠被無類型,但是這完全是另一個話題了一些辯論)這意味着它使用一種稱爲Variant的數據類型。 Variant可以推斷其它數據類型,如IntegerStringDateTime等,這是其中歧義可以出現。

這意味着您可以使用+時,而不是作爲&+不僅在處理字符串中使用一個連接運算符,但也與數字數據類型的工作時,除了運營商得到一些意外的行爲。

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"]' 
5

參考:Addition Operator (+) (VBScript)

雖然你也可以使用+運算符來連接兩個字符串,你應該使用&運營商連接來消除歧義。當您使用+運算符時,您可能無法確定是否會發生添加或字符串連接。 表達式的類型通過以下方式確定+運算符的行爲:

如果兩個表達式都是數字,那麼結果是兩個數字的相加。

如果兩個表達式都是字符串,那麼結果是兩個字符串的串聯。

如果一個表達式是數字,而另一個是一個字符串那麼Error: type mismatch將被拋出。

當混合數據類型的工作,最好是投你的變數納入使用Type Conversion Function普通數據類型。

+0

感謝您的回答。但是,是否有任何邏輯連接性爲什麼它不在3個案例中連接 – mulla

+0

我更新了我的答案。簡短的回答是,VBScript不會使用'+'運算符將數字轉換爲字符串。 –

+0

我明白你的答案...讓我這樣說吧....在第一個表達式,如果我使用類型名(「1」),它會給它作爲絃樂。根據你的回答(如果一個表達式是數字,另一個是字符串,則會拋出一個錯誤:類型不匹配)。對於情況1,它應該拋出一個錯誤。它正在增加,我需要一個合乎邏輯的結論。它不像其他人想象的那樣是一個基本的問題層面。根據結果​​我們知道它是另外的。但需要找出爲什麼要加入。讓我來更新我的問題有一些3或4個案件的問題來描繪這個... – mulla

相關問題