Vanilla JavaScript if子句在false时执行
这是我的第一篇文章,我提前感谢所有的支持 短背景:Vanilla JavaScript if子句在false时执行,javascript,Javascript,这是我的第一篇文章,我提前感谢所有的支持 短背景: Viewall: true Viewall function executed 我是脚本团队的一员,该团队正在开发一个脚本,以使我们的任务更容易。我们正在使用一个MySQL DB来允许团队选择我们创建的每个人想要使用的功能。数据库工作正常,数据检索也正常 问题: Viewall: true Viewall function executed 即使我们创建的cookie被设置为保存布尔值False,函数始终会执行它保存的if子句 functi
Viewall: true
Viewall function executed
我是脚本团队的一员,该团队正在开发一个脚本,以使我们的任务更容易。我们正在使用一个MySQL DB来允许团队选择我们创建的每个人想要使用的功能。数据库工作正常,数据检索也正常
问题:
Viewall: true
Viewall function executed
即使我们创建的cookie被设置为保存布尔值False,函数始终会执行它保存的if子句
function tkAlwaysViewAll(snippet) {
console.log('Viewall: ' + snippet);
if (snippet) {
var ticketURL = window.location.href;
var showAllURL, x;
x = ticketURL.indexOf('block=');
// if the string 'block=' does not exist in the URL, it adds the parameter and
// reloads the ticket to the correct 'view all' URL
if (x == -1) {
showAllURL = ticketURL + '&block=15:.a';
window.location.href = showAllURL;
} else {
console.log('Viewall function executed');
}
}
}
只有当snippet的值设置为True时,才能执行上面的代码。但是,它总是被执行,忽略snippet的值。下面是console.log()
的输出,该输出仅用于调试。
第一个console.log()
显示snippet变量的值。
第二个console.log()
只有在页面重新加载后才会显示(或者直接使用带有“block”参数的链接时,但我们知道这一点,并且没有使用它)
当代码片段为真时:
Viewall: true
Viewall function executed
并且当代码段为False时(不应执行函数):
函数未使用任何全局变量,也未被任何其他事件更改
我在这个函数中做错了什么
最好的问候原因是您向函数传递了一个
字符串
“false”
(cookies总是存储字符串
s)。将其置于if()
条件中,内部将字符串
转换为布尔值。在该机制中,非空字符串转换为true
下面是Javascript在转换时对非布尔值所做的操作:
//将val转换为布尔值并返回它
函数truthy(val){
返回布尔值(val)
}
console.log(truthy(“true”)//true
console.log(truthy(“false”)//true
console.log(truthy(“”)//false
console.log(truthy(1))//true
console.log(truthy(0))//false
console.log(truthy([])//true
console.log(truthy([].length))//false
log(truthy({}))//true
我猜您没有布尔值console.log(snippet,typeof snippet)
您确定它不是字符串吗<代码>“false”而不是false
我们需要确切地知道snippet
设置为什么。因此,请为你的问题创建一个新的解决方案。你可能应该读一读关于这可能是你的问题。如果你喜欢,它可能会做一些不同的事情。但这一切都取决于该变量是什么,即使我们创建的cookies设置为保存布尔值False
cookies保存字符串值。事实上,更正确的说法是cookies是字符串。它们被切分为键和值,但关键是,在检索时,您在cookie中放入的任何类型都将更改为字符串,因此,如果您输入id=1
,然后获取id
,您将得到字符串“1”
。类似地,布尔值false
将作为字符串“false”
返回。感谢您提供了清晰的示例。该函数也可以正常工作,以确保返回的值是布尔值。在查看整个脚本时,我们可能会将其包含在cookie读取函数中。