问题
我在vue3项目里一开始的第二段代码,但是结果总是将active的值变为0,让我很是不解,于是将其改为第一段代码块的形式,就正常了,很是不解,于是便来探究这两段代码的区别。
区别
这两段代码的区别主要在于它们在处理条件语句时的逻辑和语法完整性。
代码块1:
watch(() => route.query.messageType, () => {
if (route.query.messageType === 'life') {
active.value = 1
}
else {
active.value = 0
}
})
-
逻辑: 这段代码首先检查
route.query.messageType
是否等于字符串'life'
。-
如果条件为真(即
route.query.messageType
的值是'life'
),则active.value
被设置为1
。 -
如果条件为假(即
route.query.messageType
的值不是'life'
),则active.value
被设置为0
。
-
-
结构: 这是一个完整的
if-else
语句,包含了if
部分和else
部分,确保了无论条件真假,active.value
都会被赋予一个明确的值。
代码块2:
watch(() => route.query.messageType, () => {
if (route.query.messageType === 'life')
active.value = 1
active.value = 0
})
-
逻辑: 这段代码同样首先检查
route.query.messageType
是否等于字符串'life'
。-
如果条件为真(即
route.query.messageType
的值是'life'
),则active.value
被设置为1
。 -
但是,不论条件真假,
active.value
随后都会被无条件地设置为0
,因为active.value = 0
这行代码并不在else
块中,而是紧跟在if
块内部且没有任何条件限制。
-
-
结构: 这是一个语法上不完整的
if
语句,缺少了对应的else
部分。更重要的是,active.value = 0
这行代码的位置导致了逻辑错误,因为它会无条件执行,从而覆盖了if
块中可能的赋值。
总结
-
第一段代码正确地根据条件为
active.value
赋予不同的值。 -
第二段代码由于缺少正确的结构,导致
active.value
总是被设置为0
,无论route.query.messageType
的值是什么。这是一个逻辑错误,应该通过添加else
块或者将active.value = 0
移到if
块外部(如果这是有意为之的话,但通常这不是好的编程实践)来修正。