好的,我开始学习《JavaScript入门第5版》这本书,但是对一段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字符串并将其存储在value变量中。
var value = document.cookie;
接下来,您需要找出将作为参数传递给函数的 cookie 名称在 value 字符串中的位置。您可以使用 String 对象的 indexOf() 方法来查找此信息,如下行所示:
var cookieStartsAt = value.indexOf(" " + name + "=");
该方法将返回单个cookie的字符位置,如果没有该名称或者没有该cookie,则返回-1。您可以搜索“ ”+ name +“=”以便不会无意中找到包含所需名称的cookie名称或值。例如,如果您有xFoo、Foo和yFoo作为cookie名称,那么在没有空格的情况下搜索Foo将首先匹配xFoo,这不是您想要的!
indexOf() 方法是用来查找字符串中某个字符或子字符串第一次出现的位置。在此示例中,我们使用indexOf()方法查找带有“ name =”的子字符串,并返回该子字符串的起始位置。如果找不到该子字符串,则返回-1。
例如,如果您正在查找名为“ Foo”的cookie,则需要搜索“ name = Foo”,而不是只搜索“ Foo”。如果您只搜索“ Foo”,则可能会误匹配其他名称中包含“ Foo”的cookie,例如“ xFoo”和“ yFoo”。
cookiename=
的Cookie。我会使用var cookies = value.split(';');
。之后,你得到了一个数组,其中每个单独的Cookie都是以name=value
的格式作为项。他们的方法试图更高效,但在我看来过于复杂,而且不完全可靠。 - GolezTrol