Нет, порядок не гарантируется.
document.cookie
- это свойство accessor с собственными функциями set и getter.Если вы установите значение, один файл cookie будет добавлен / обновлен.Если вы получите значение, будет возвращен список всех файлов cookie, разделенных точкой с запятой.
Порядок, в котором будет возвращен список (насколько я могу найти), является неопределенным поведением. Определение document.cookie
из «Спецификации HTML уровня 2 модели объекта документа (DOM)» гласит, что:
Когда этот атрибут считывается, все файлы cookie возвращаются какодна строка, в которой каждая пара имя-значение cookie объединяется в список пар имя-значение, причем каждый элемент списка разделяется знаком ';'(точка с запятой).
В общем (проверено на Chrome / Firefox / Edge) кажется, что файлы cookie, которые устанавливаются первыми с помощью document.cookie
, возвращаются первыми.Так что в вашем случае, если вы установили другой файл cookie перед тем, как установить «foobar», тогда «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
Интересно, что кажется, что файлы cookie, которые устанавливаются с помощью *Заголовок 1019 * размещается после файлов cookie, установленных с помощью document.cookie
, даже если они установлены первыми.Скрипку можно найти здесь .