首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逻辑运算符总是保持为真吗?

逻辑运算符总是保持为真吗?
EN

Stack Overflow用户
提问于 2017-07-05 18:59:11
回答 1查看 42关注 0票数 0

我想要的是比较当前url和我的cookie数组,它将包含用户访问过的所有URL,所以它会比较数组是否包含当前链接,如果没有,它会将新链接推送到数组,并再次使用包含新推链接的新数组重新创建cookie,所以我现在面临的问题是,每次检查唯一链接的if函数都是真的,我不确定问题是什么?

你们能看一下吗:

代码语言:javascript
复制
<script type="text/javascript">

function createCookie(name,value,days) {
    var expires = "";
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days*24*60*60*1000));
        expires = "; expires=" + date.toUTCString();
    }
    document.cookie = name + "=" + value + expires + "; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name,"",-1);
}

var url = window.location.href;
var pathname = new URL(url).pathname;
var jsonObj = [];

//jsonObj.push("test");

var x = readCookie('vid_cookies');
if (x) {
var res = x.split(",");
console.log(res);
for (var i = 0; i < res.length; i++) {
    if (pathname != res[i]) {
        alert("IS NOT EQUAL");
    //res.push(pathname);
    //var joinedArray = res.join(",");
    //console.log(joinedArray);
    //createCookie('vid_cookies',joinedArray,7);
    //var z = readCookie('vid_cookies');
    //console.log(z)
    }
}
} else {
    jsonObj.push(pathname);
createCookie('vid_cookies',jsonObj,7);
}


//alert(jsonObj);

</script>

以下是数组,如:

代码语言:javascript
复制
["/evercookie-master/yahoo.html", "/evercookie-master/facebook.html", "/evercookie-master/facebook.html", "/evercookie-master/facebook.html"]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-05 19:23:07

逻辑是不正确的。如果只想在数组不存在的情况下才向数组添加值,则必须在添加数组之前检查所有元素。

在您的代码中,只要任何元素不匹配,就会添加该值。当然,情况总是如此,因为在n元素之外,n - 1将不匹配。

一种方法是使用Array#every

代码语言:javascript
复制
if (res.every(x => x !== pathname)) {
 // add to array and set cookie
}

或者,您可以将数组转换为Set,始终添加值并设置cookie。Set将自动还原以下值:

代码语言:javascript
复制
var res = new Set(x.split(","));
res.add(pathname);
res = Array.from(res);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44934042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档