slice() / substr() / substring()
Метод
Метод
Метод
slice() возвращает новый массив, содержащий копию части исходного массива.Метод
substr() возвращает указанное количество символов из строки, начиная с указанной позиции.Метод
substring() возвращает подстроку строки между двумя индексами, или от одного индекса и до конца строки.localeCompare()
Метод
localeCompare() возвращает число, указывающее, должна ли данная строка находиться до, после или в том же самом месте, что и строка, переданная через параметр, при сортировке этих строк.
Новые аргументы
locales и options позволяют приложениям определять язык, чей порядок сортировки оно хочет использовать и настраивать поведение этой функции. В старых реализациях, игнорирующих аргументы locales и options, используемая локаль и порядок сортировки целиком зависят от реализации.Array.from() / Array.of() / fill()
Метод
Array.from() создаёт новый экземпляр Array из массивоподобного или итерируемого объекта.
Метод
Array.of() создаёт новый экземпляр массива Array из произвольного числа аргументов, вне зависимости от числа или типа аргумента.
Метод
fill() заполняет все элементы массива от начального до конечного индексов одним значением.Prototype
Объекты в JavaScript можно организовать в цепочки так, чтобы свойство, не найденное в одном объекте, автоматически искалось бы в другом.
Связующим звеном выступает специальное свойство
__proto__.Прототип proto
Если один объект имеет специальную ссылку
__proto__ на другой объект, то при чтении свойства из него, если свойство отсутствует в самом объекте, оно ищется в объекте __proto__.
Объект, на который указывает ссылка
__proto__, называется «прототипом». В данном случае получилось, что animal является прототипом для rabbit.
Также говорят, что объект
rabbit «прототипно наследует» от animal.
Другими словами, прототип – это «резервное хранилище свойств и методов» объекта, автоматически используемое при поиске.
У объекта, который является
__proto__, может быть свой __proto__, у того – свой, и так далее. При этом свойства будут искаться по цепочке.Метод hasOwnProperty
Обычный цикл
for..in не делает различия между свойствами объекта и его прототипа.
Он перебирает всё, например:
var animal = { eats: true }; var rabbit = { jumps: true, __proto__: animal }; for (var key in rabbit) { alert( key + " = " + rabbit[key] ); // выводит и "eats" и "jumps" }
Иногда хочется посмотреть, что находится именно в самом объекте, а не в прототипе.
Вызов obj.hasOwnProperty(prop) возвращает
true, если свойство propпринадлежит самому объекту obj, иначе false.
Например:
var animal = { eats: true }; var rabbit = { jumps: true, __proto__: animal }; alert( rabbit.hasOwnProperty('jumps') ); // true: jumps принадлежит rabbit alert( rabbit.hasOwnProperty('eats') ); // false: eats не принадлежит
Для того, чтобы перебрать свойства самого объекта, достаточно профильтровать
keyчерез hasOwnProperty:var animal = { eats: true }; var rabbit = { jumps: true, __proto__: animal }; for (var key in rabbit) { if (!rabbit.hasOwnProperty(key)) continue; // пропустить "не свои" свойства alert( key + " = " + rabbit[key] ); // выводит только "jumps" }
Object.create(null)
Зачастую объекты используют для хранения произвольных значений по ключу, как коллекцию:
var data = {};
data.text = "Привет";
data.age = 35;
// ...
При дальнейшем поиске в этой коллекции мы найдём не только
text и age, но и встроенные функции:var data = {};
alert(data.toString); // функция, хотя мы её туда не записывали
Это может быть неприятным сюрпризом и приводить к ошибкам, если названия свойств приходят от посетителя и могут быть произвольными.
Чтобы этого избежать, мы можем исключать свойства, не принадлежащие самому объекту:
var data = {};
// выведет toString только если оно записано в сам объект
alert(data.hasOwnProperty('toString') ? data.toString : undefined);
Однако, есть путь и проще:
var data = Object.create(null); data.text = "Привет"; alert(data.text); // Привет alert(data.toString); // undefined
Объект, создаваемый при помощи
Object.create(null) не имеет прототипа, а значит в нём нет лишних свойств. Для коллекции – как раз то, что надо.Методы для работы с proto
В современных браузерах есть два дополнительных метода для работы с
__proto__. Зачем они нужны, если есть __proto__? В общем-то, не очень нужны, но по историческим причинам тоже существуют.- Чтение: Object.getPrototypeOf(obj)
- Возвращает
obj.__proto__(кроме IE8-) - Запись: Object.setPrototypeOf(obj, proto)
- Устанавливает
obj.__proto__ = proto(кроме IE10-).
Кроме того, есть ещё один вспомогательный метод:
- Создание объекта с прототипом: Object.create(proto, descriptors)
- Создаёт пустой объект с
__proto__, равным первому аргументу (кроме IE8-), второй необязательный аргумент может содержать дескрипторы свойств.
Итого
- В JavaScript есть встроенное «наследование» между объектами при помощи специального свойства
__proto__. - При установке свойства
rabbit.__proto__ = animalговорят, что объектanimalбудет «прототипом»rabbit. - При чтении свойства из объекта, если его в нём нет, оно ищется в
__proto__. Прототип задействуется только при чтении свойства. Операции присвоенияobj.prop =или удаленияdelete obj.propсовершаются всегда над самим объектомobj.
Несколько прототипов одному объекту присвоить нельзя, но можно организовать объекты в цепочку, когда один объект ссылается на другой при помощи
__proto__, тот ссылается на третий, и так далее.[[prototype]] == __proto__
Одинаково, но не всегда.prototype - родительской__proto__- ребенковское
Object.setPrototypeOf()
Метод
Метод
Object.setPrototypeOf() устанавливает прототип (то есть, внутреннее свойство [[Prototype]]) указанного объекта в другой объект или null.Literals Object
let emptyObjectName = {}
let objectName = {
name: "name",
age: "21"
}
let objectName = {
name: "name",
age: "21"
}
Constructor
Все объекты наследуют свойство
constructor из своего прототипа:var o = {};
o.constructor === Object; // true
var a = [];
a.constructor === Array; // true
var n = new Number(3);
n.constructor === Number; // true
Object.assign()
Метод Object.assign() используется для копирования значений всех собственных перечисляемых свойств из одного или более исходных объектов в целевой объект. После копирования он возвращает целевой объект.
Object.create()
Метод
Object.create() создаёт новый объект с указанными объектом прототипа и свойствами.Object.defineProperty()
Метод
Object.defineProperty() определяет новое или изменяет существующее свойство непосредственно на объекте, возвращая этот объект.configurable- Равен
trueтолько в том случае, если тип этого дескриптора свойства может быть изменён и если свойство может быть удалено из содержащего его объекта.
Значение по умолчанию установлено вfalse. enumerable- Равен
trueтолько в том случае, если это свойство можно увидеть через перечисление свойств содержащего его объекта.
Значение по умолчанию установлено вfalse.
Дескриптор данных также может содержать следующие дополнительные ключи:
value- Значение, ассоциированное со свойством. Может быть любым допустимым значением JavaScript (числом, объектом, функцией и т.д.).
Значение по умолчанию установлено вundefined. writable- Равен
trueтолько в том случае, если значение, ассоциированное со свойством, может быть изменено с помощью оператора присваивания.
Значение по умолчанию установлено вfalse.
Object.values()
Метод
Object.values() возвращает массив значений перечисляемых свойств объекта в том же порядке что и цикл for...in.Object.entries()
Object.entries() метод возвращает массив собственных перечисляемых свойств указанного объекта в формате [key, value], в том же порядке, что и в цикле for...in (разница в том, что for-in также перечисляет свойства из цепочки прототипов).Object.getOwnPropertyNames()
Метод
Object.getOwnPropertyNames() возвращает массив со всеми свойствами (независимо от того, перечисляемые они или нет), найденными непосредственно в переданном объекте.match()
Метод
match() возвращает получившиеся совпадения при сопоставлении строки с регулярным выражением.str.match(regexp)
reduce()
Метод
reduce() применяет функцию к аккумулятору и каждому значению массива (слева-направо), сводя его к одному значению.
Метод
reduce() выполняет функцию callback один раз для каждого элемента, присутствующего в массиве, за исключением пустот, принимая четыре аргумента: начальное значение (или значение от предыдущего вызова callback), значение текущего элемента, текущий индекс и массив, по которому происходит итерация.
При первом вызове функции, параметры
accumulator и currentValue могут принимать одно из двух значений. Если при вызове reduce() передан аргумент initialValue, то значение accumulator будет равным значению initialValue, а значение currentValue будет равным первому значению в массиве. Если аргумент initialValue не задан, то значение accumulator будет равным первому значению в массиве, а значение currentValue будет равным второму значению в массиве.
Если массив пустой и аргумент
initialValue не указан, будет брошено исключение TypeError. Если массив состоит только из одного элемента (независимо от его положения в массиве) и аргумент initialValue не указан, или если аргумент initialValue указан, но массив пустой, то будет возвращено одно это значение, без вызова функции callback.replace()
Метод
replace() возвращает новую строку с некоторыми или всеми сопоставлениями с шаблоном, заменёнными на заменитель. Шаблон может быть строкой или регулярным выражением, а заменитель может быть строкой или функцией, вызываемой при каждом сопоставлении.Arrow Function
Выражения стрелочных функций имеют более короткий синтаксис по сравнению с функциональными выражениями и лексически привязаны к значению this (но не привязаны к собственному this, arguments, super, или new.target). Стрелочные функции всегда анонимные.
function nameFunction(param1, param2) {
return code
};
(param1, param2) => {code};
Closure / Замыкание
Переменная вне функции - разомкнутая.
Когда переменная используется внутри функции, она замыкается, замыкается внутри контекста этой самой функции.
Вне функции она всё так же разомкнута.
Когда переменная используется внутри функции, она замыкается, замыкается внутри контекста этой самой функции.
Вне функции она всё так же разомкнута.
Callback
Callback это свойство...... всё))
Простыми словами: коллбэк – это функция, которая должна быть выполнена после того, как другая функция завершила выполнение (отсюда и название: callback – функция обратного вызова).
Чуть сложнее: В JavaScript функции – это объекты. Поэтому функции могут принимать другие функции в качестве аргументов, а также функции могут возвращать функции в качестве результата. Функции, которые это умеют, называются функциями высшего порядка. А любая функция, которая передается как аргумент, называется callback-функцией. Чтобы лучше разобраться, давайте посмотрим на примерах, как это выглядит.
Простыми словами: коллбэк – это функция, которая должна быть выполнена после того, как другая функция завершила выполнение (отсюда и название: callback – функция обратного вызова).
Чуть сложнее: В JavaScript функции – это объекты. Поэтому функции могут принимать другие функции в качестве аргументов, а также функции могут возвращать функции в качестве результата. Функции, которые это умеют, называются функциями высшего порядка. А любая функция, которая передается как аргумент, называется callback-функцией. Чтобы лучше разобраться, давайте посмотрим на примерах, как это выглядит.
Json
В этой главе мы рассмотрим работу с форматом JSON, который используется для представления объектов в виде строки.
Это один из наиболее удобных форматов данных при взаимодействии с JavaScript. Если нужно с сервера взять объект с данными и передать его клиенту, то в качестве промежуточного формата – для передачи по сети, почти всегда используют именно его.
В современных браузерах есть замечательные методы, знание тонкостей которых делает операции с JSON простыми и комфортными.
Инкапсуляция, наследование, полиморфизм, абстракция
RegExp
Комментариев нет:
Отправить комментарий