【问题标题】:Usage of + operator in differents situations in vbscriptvbscript中不同情况下+运算符的使用
【发布时间】:2016-11-23 10:16:55
【问题描述】:

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:作为String,在操作过程中显式转换为numeric

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

我需要不同行为的逻辑原因。但在其他语言中它是直截了当的,并且会按预期工作

【问题讨论】:

    标签: vbscript qtp adsutil.vbs


    【解决方案1】:

    我同意@thomas-inzina has said 的大部分内容,但OP 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"]'
    

    【讨论】:

      【解决方案2】:

      参考:Addition Operator (+) (VBScript)

      虽然您也可以使用 + 运算符来连接两个字符串,但您应该使用 & 运算符进行连接以消除歧义。当您使用 + 运算符时,您可能无法确定是否会发生加法或字符串连接。 表达式的类型通过以下方式决定 + 运算符的行为:

      如果两个表达式都是数字,则结果是两个数字相加。

      如果两个表达式都是字符串,则结果是两个字符串的连接。

      如果一个表达式是数字,另一个是字符串,则将抛出 Error: type mismatch

      使用混合数据类型时,最好使用Type Conversion Function 将变量转换为通用数据类型。

      【讨论】:

      • 感谢您的回答。但是是否存在任何逻辑连接,为什么它在第 3 种情况下没有连接
      • 我更新了我的答案。简短的回答是 VBScript 不会使用 + 运算符将数字转换为字符串。
      • 我理解你的回答......让我这样说......在第一个表达式中,如果我使用 TypeName("1") 它将作为字符串给出。根据您的回答(如果一个表达式是数字,另一个是字符串,则将抛出错误:类型不匹配。)对于案例 1,它应该抛出错误。它正在添加,我需要一个合乎逻辑的结论。这不是其他人认为的基本问题。根据结果​​,我们知道它是加法。但需要找到它为什么要添加。让我用问题中的一些 3 或 4 个案例来更新我的问题来描述这个......
      • @mulla 您提供的示例案例并不相同。
      • @Lankymart:但我想知道为什么在某些部分字符串的行为是数字,而在其他区域则不一样
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多