Chrome:document.cookie的顺序是否得到保证?

时间:2019-06-08 07:43:53

标签: javascript google-chrome firefox standards

document.cookie='foobar'

。其后:

console.log(document.cookie.indexOf('foobar'))

。在Chrome上进行测试时,总是给我0

Chrome浏览器的订单是否得到保证?

(也可能对Ecmascript / Firefox / etc。感兴趣)

2 个答案:

答案 0 :(得分:0)

我认为您可能认为document.cookie是某种数组。但是document.cookie只是string

'foobar'.indexOf('foobar')返回0,因为在索引0处发现了foobar

答案 1 :(得分:0)

不,不能保证订单。

document.cookie是具有本地setter和getter函数的访问器属性。如果您设置一个值,则将添加/更新单个cookie。如果得到该值,将返回所有cookie的以分号分隔的列表。

列表的返回顺序(据我所知)是未定义的行为。 “文档对象模型(DOM)2级HTML规范”中的The definition of document.cookie仅声明:

  

读取此属性后,所有cookie均作为单个字符串返回,每个cookie的“名称/值”对被连接到“名称-值”对的列表中,每个列表项均以“;”分隔。 (分号)。

通常(在Chrome / Firefox / Edge上测试),似乎首先返回使用document.cookie设置的cookie。因此,在您的情况下,如果在设置“ foobar”之前设置了另一个cookie,则“ foobar”将不会位于字符串索引0。

document.cookie='anothercookie=anothercookie';
document.cookie='foobar=foobar';

console.log('cookie', document.cookie); // cookie anothercookie=anothercookie; foobar=foobar
console.log('index', document.cookie.indexOf('foobar')); // index 29

有趣的是,使用set-cookie标头设置的cookie似乎放在使用document.cookie设置的cookie的后面,尽管它们是先设置的。可以找到here的小提琴。