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读取函数中。