2016-02-29 47 views
2

好了,所以我已经开始学习从书开始的Javascript第5版的JavaScript,只是一个js脚本的indexOf()在JavaScript

function getCookieValue(name) { 
var value = document.cookie; 
var cookieStartsAt = value.indexOf(" " + name + "="); 
if (cookieStartsAt == -1) { 
    cookieStartsAt = value.indexOf(name + "="); 
} 
if (cookieStartsAt == -1) { 
    value = null; 
} else { 
    cookieStartsAt = value.indexOf("=", cookieStartsAt) + 1; 
    var cookieEndsAt = value.indexOf(";", cookieStartsAt); 
    if (cookieEndsAt == -1) { 
     cookieEndsAt = value.length; 
    } 
    value = unescape(value.substring(cookieStartsAt, 
     cookieEndsAt)); 
} 
return value;} 

我的问题是如何在的indexOf运营商在这里工作(我知道如何混淆它工作和使用它之前)?

函数的第一个任务就是拿到了document.cookie字符串,并将其存储在变量的值

var value = document.cookie; 

接下来,你需要: 上述程序是由去为这本书定义见下文找出将名称作为参数传递给函数 的cookie位于 值字符串内。您使用印出x的()中的字符串对象的方法来找到这个 信息,作为显示在下面的行:

var cookieStartsAt = value.indexOf(" " + name + "="); 

的方法将返回其中个体cookie被发现或字符位置-1如果没有 这样的名字,并且因此不存在这样的cookie。您在 “”+ name +“=”上进行搜索,以便您不会无意中找到包含所需名称的Cookie名称或值。例如,如果您的 有 xFoo,Foo和yFoo作为cookie名称,则在前面没有空格的情况下搜索Foo将首先匹配 xFoo,这不是您想要的!

刚刚发生了什么?他们如何使用indexOf()实现名称的位置?请解释 ?我无法理解xfoo,foo,yfoo例子?寻找一个更简单的例子。

+1

看起来像一个可怜的教程。也许我错了,但我认为他们阅读cookie的方式并不安全,没有任何意义。首先,[cookies以分号隔开](https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie),但是,正如您所说,您可以找到包含'cookiename ='值的cookie。我会使用'var cookies = value.split(';');'。在那之后,你得到了一个数组,其中包含单独的cookies作为项目,每个都以'name = value'的形式表示。他们的方法是(试图成为)更有效率,但IMO不必要地复杂而且不防水。 – GolezTrol

回答

1

document.cookie包含像cookiename=cookievalue字符串

的indexOf越来越饼干

var cookieStartsAt = value.indexOf("cookiename=");

这可以让你用这个数字来获取值部分的价值部分的开头位置的字符串与substring()