2016-02-29 73 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()