--- title: Array.observe() slug: Web/JavaScript/Reference/Global_Objects/Array/observe tags: - Array - ECMAScript7 - Experimental - Expérimental(2) - JavaScript - Method - Reference - Référence(2) translation_of: Archive/Web/JavaScript/Array.observe ---
{{JSRef("Global_Objects", "Array")}}

Сводка

Метод Array.observe() используется для асинхронного обзора изменений в массивах, подобно тому, как метод {{jsxref("Object.observe()")}} используется для тех же целей для объектов. Он предоставляет поток изменений в порядке их возникновения.

Синтаксис

Array.observe(arr, callback)

Параметры

arr
Обозреваемый массив.
callback
Функция, вызываемая на каждое сделанное изменение со следующими аргументами:
changes
Массив объектов, каждый из которых представляет одно изменение. Эти объекты обладают следующими свойствами:
  • name: название изменённого свойства.
  • object: изменённый массив, после применения этого изменения.
  • type: строка, указывающая тип произошедшего изменения. Может быть одной из "add", "update", "delete" или "splice".
  • oldValue: только для типов "update" и "delete". Значение до изменения.
  • index: только для типа "splice". Индекс, по которому произошло изменение.
  • removed: только для типа "splice". Массив с удалёнными элементами.
  • addedCount: только для типа "splice". Количество добавленных элементов.

Описание

Функция callback вызывается каждый раз, когда с массивом arr происходят какие-либо изменения. Параметром в неё передаётся массив со всеми произошедшими изменениями в порядке их возникновения.

Изменения через методы объекта {{jsxref("Array")}}, например, посредством метода {{jsxref("Array.prototype.pop()")}}, будут зарегистрированы как изменения типа "splice". Присваивание по индексу, в результате которого размер массива не изменится, может быть зарегистрировано, как изменение типа "update".

Примеры

Пример: журналирование всех трёх типов событий

var arr = ['a', 'b', 'c'];

Array.observe(arr, function(changes) {
  console.log(changes);
});

arr[1] = 'B';
// [{type: 'update', object: <arr>, name: '1', oldValue: 'b'}]

arr[3] = 'd';
// [{type: 'splice', object: <arr>, index: 3, removed: [], addedCount: 1}]

arr.splice(1, 2, 'beta', 'gamma', 'delta');
// [{type: 'splice', object: <arr>, index: 1, removed: ['B', 'c', 'd'], addedCount: 3}]

Спецификации

Черновое предложение к обсуждению для ECMAScript 7.

Совместимость с браузерами

{{CompatibilityTable}}
Возможность Chrome Firefox (Gecko) Internet Explorer Opera Safari
Базовая поддержка {{CompatChrome("36")}} {{CompatNo}} {{CompatNo}} {{CompatNo}} {{CompatNo}}
Возможность Android Chrome для Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базовая поддержка {{CompatNo}} {{CompatVersionUnknown}} {{CompatNo}} {{CompatNo}} {{CompatNo}} {{CompatNo}}

Смотрите также