Chrome: Гарантирован ли заказ document.cookie? - PullRequest
0 голосов
/ 08 июня 2019
document.cookie='foobar'

. Сопровождается:

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

. Всегда дает мне 0 при тестировании на Chrome.

Гарантирован ли заказ (чем-либо) для Chrome?

(Также могут быть заинтересованы в Ecmascript / Firefox /etc.)

Ответы [ 2 ]

0 голосов
/ 08 июня 2019

Нет, порядок не гарантируется.

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, даже если они установлены первыми.Скрипку можно найти здесь .

0 голосов
/ 08 июня 2019

Я думаю, вы можете рассматривать document.cookie как некоторый массив.Но document.cookie это просто string.

'foobar'.indexOf('foobar') возвращает 0, поскольку foobar было найдено с индексом 0.

...