VBScript中赋值和相等运算符的求值顺序是什么?

时间:2015-10-09 16:57:35

标签: vbscript asp-classic operators

由于赋值运算符和相等运算符都是相同的字符(=),哪个操作优先于两个用途的表达式?

举个例子,这行代码做了什么?

MyThing = Session("WHATEVER") = "A"

我正在查看一些遗留代码,并且有很多表达式就像这样。在我熟悉的语言中,这将是一个双重任务。但是,在使用这些表达式的地方,第一个运算符左侧的变量将被假定为布尔值。

If (MyThing) 
    doStuff() 
EndIf

那是哪个? MyThing是否等于" A"或者它是一个布尔值?

1 个答案:

答案 0 :(得分:2)

MyThing是布尔值,特别是如果Session("WHATEVER")包含“A”,则MyThing为真,否则为假。换句话说,第一个等号是赋值运算符,而第二个是等号运算符。

就个人而言,我会添加括号以使预期的行动更清晰,即

MyThing = (Session("WHATEVER") = "A")

但在大多数情况下,它会在没有括号的情况下工作。

AND有类似的重载:它既是布尔运算符又是按位算术运算符。就像等号一样,大部分时间翻译都会把它弄清楚,但括号仍然是个好主意,因为有时 - 并非总是如此 - 如果你尝试的话它会做出意想不到的事情

If MySettings AND ThisFlag > 0 Then

- 如上所述,有时上述内容将被解释为(MySettings = True) AND (ThisFlag > 0)而不是预期的(MySettings AND ThisFlag) > 0