From c131e5a8958fe5f5fd4a40a02ddcf3289dc86fab Mon Sep 17 00:00:00 2001 From: Ilya Kantor Date: Mon, 13 Jul 2015 16:25:17 +0300 Subject: [PATCH] es6 --- 1-js/10-es-modern/10-set-map/article.md | 103 +++++------- .../1-promise-settimeout/solution.md | 0 .../1-promise-settimeout/task.md | 0 .../11-promise/2-promise-sequence/solution.md | 27 ++++ .../solution.view}/guest.json | 0 .../solution.view/httpGet.js | 25 +++ .../solution.view/index.html | 34 ++++ .../solution.view}/user.json | 0 .../2-promise-sequence/source.view/guest.json | 4 + .../2-promise-sequence/source.view/httpGet.js | 25 +++ .../2-promise-sequence/source.view/index.html | 20 +++ .../2-promise-sequence/source.view}/user.json | 0 .../11-promise/2-promise-sequence/task.md | 26 +++ .../{15-promise => 11-promise}/anon.png | Bin .../{15-promise => 11-promise}/article.md | 148 ++++++++++++------ 1-js/10-es-modern/11-promise/guest.json | 4 + 1-js/10-es-modern/11-promise/promiseEcma.png | Bin 0 -> 15667 bytes .../11-promise/promiseEcma@2x.png | Bin 0 -> 41058 bytes .../11-promise/promiseHandlerVariants.png | Bin 0 -> 47078 bytes .../11-promise/promiseHandlerVariants@2x.png | Bin 0 -> 102052 bytes 1-js/10-es-modern/11-promise/promiseInit.png | Bin 0 -> 10858 bytes .../11-promise/promiseInit@2x.png | Bin 0 -> 22918 bytes .../11-promise/promiseLoadAvatarChain-1.png | Bin 0 -> 13476 bytes .../promiseLoadAvatarChain-1@2x.png | Bin 0 -> 30101 bytes .../11-promise/promiseLoadAvatarChain-2.png | Bin 0 -> 24556 bytes .../promiseLoadAvatarChain-2@2x.png | Bin 0 -> 54386 bytes .../11-promise/promiseLoadAvatarChain-3.png | Bin 0 -> 41763 bytes .../promiseLoadAvatarChain-3@2x.png | Bin 0 -> 92826 bytes .../11-promise/promiseLoadAvatarChain-4.png | Bin 0 -> 53308 bytes .../promiseLoadAvatarChain-4@2x.png | Bin 0 -> 118790 bytes .../promiseLoadAvatarChain.png | Bin .../promiseLoadAvatarChain@2x.png | Bin 1-js/10-es-modern/11-promise/promiseTwo.png | Bin 0 -> 17988 bytes .../10-es-modern/11-promise/promiseTwo@2x.png | Bin 0 -> 36357 bytes .../promiseTwoThen.png | Bin 29078 -> 29460 bytes .../promiseTwoThen@2x.png | Bin 62871 -> 63681 bytes .../11-promise/promiseUserFlow.png | Bin 0 -> 32441 bytes .../11-promise/promiseUserFlow@2x.png | Bin 0 -> 72869 bytes 1-js/10-es-modern/11-promise/user.json | 4 + .../userNoGithub.json | 0 .../{17-generator => 12-generator}/anon.png | Bin .../{17-generator => 12-generator}/article.md | 0 .../10-es-modern/12-generator/genYield2-2.png | Bin 0 -> 33709 bytes .../12-generator/genYield2-2@2x.png | Bin 0 -> 78330 bytes .../10-es-modern/12-generator/genYield2-3.png | Bin 0 -> 27928 bytes .../12-generator/genYield2-3@2x.png | Bin 0 -> 63896 bytes 1-js/10-es-modern/12-generator/genYield2.png | Bin 0 -> 22530 bytes .../12-generator/genYield2@2x.png | Bin 0 -> 50282 bytes .../12-generator/generateSequence-1.png | Bin 0 -> 10259 bytes .../12-generator/generateSequence-1@2x.png | Bin 0 -> 23891 bytes .../12-generator/generateSequence-2.png | Bin 0 -> 14686 bytes .../12-generator/generateSequence-2@2x.png | Bin 0 -> 32379 bytes .../12-generator/generateSequence-3.png | Bin 0 -> 14754 bytes .../12-generator/generateSequence-3@2x.png | Bin 0 -> 32615 bytes .../12-generator/generateSequence-4.png | Bin 0 -> 14788 bytes .../12-generator/generateSequence-4@2x.png | Bin 0 -> 32193 bytes 1-js/10-es-modern/12-generator/user.json | 4 + 1-js/10-es-modern/15-promise/promiseEcma.png | Bin 15022 -> 0 bytes .../15-promise/promiseEcma@2x.png | Bin 38571 -> 0 bytes .../15-promise/promiseHandlerVariants.png | Bin 46708 -> 0 bytes .../15-promise/promiseHandlerVariants@2x.png | Bin 101250 -> 0 bytes 1-js/10-es-modern/15-promise/promiseInit.png | Bin 10702 -> 0 bytes .../15-promise/promiseInit@2x.png | Bin 22513 -> 0 bytes .../15-promise/promiseLoadAvatarChain-1.png | Bin 12879 -> 0 bytes .../promiseLoadAvatarChain-1@2x.png | Bin 28947 -> 0 bytes .../15-promise/promiseLoadAvatarChain-2.png | Bin 23610 -> 0 bytes .../promiseLoadAvatarChain-2@2x.png | Bin 52585 -> 0 bytes .../15-promise/promiseLoadAvatarChain-3.png | Bin 40613 -> 0 bytes .../promiseLoadAvatarChain-3@2x.png | Bin 90486 -> 0 bytes .../15-promise/promiseLoadAvatarChain-4.png | Bin 50375 -> 0 bytes .../promiseLoadAvatarChain-4@2x.png | Bin 112470 -> 0 bytes 1-js/10-es-modern/15-promise/promiseTwo.png | Bin 18279 -> 0 bytes .../10-es-modern/15-promise/promiseTwo@2x.png | Bin 36862 -> 0 bytes .../15-promise/promiseUserFlow.png | Bin 34651 -> 0 bytes .../15-promise/promiseUserFlow@2x.png | Bin 78013 -> 0 bytes .../15-promise/user-no-guthub.json | 4 - .../10-es-modern/17-generator/genYield2-2.png | Bin 31534 -> 0 bytes .../17-generator/genYield2-2@2x.png | Bin 73441 -> 0 bytes .../10-es-modern/17-generator/genYield2-3.png | Bin 25158 -> 0 bytes .../17-generator/genYield2-3@2x.png | Bin 58403 -> 0 bytes 1-js/10-es-modern/17-generator/genYield2.png | Bin 21141 -> 0 bytes .../17-generator/genYield2@2x.png | Bin 47430 -> 0 bytes .../17-generator/generateSequence-1.png | Bin 9195 -> 0 bytes .../17-generator/generateSequence-1@2x.png | Bin 21884 -> 0 bytes .../17-generator/generateSequence-2.png | Bin 13714 -> 0 bytes .../17-generator/generateSequence-2@2x.png | Bin 30374 -> 0 bytes .../17-generator/generateSequence-3.png | Bin 13747 -> 0 bytes .../17-generator/generateSequence-3@2x.png | Bin 30376 -> 0 bytes .../17-generator/generateSequence-4.png | Bin 13777 -> 0 bytes .../17-generator/generateSequence-4@2x.png | Bin 29981 -> 0 bytes 1-js/10-es-modern/8-symbol/article.md | 101 ++++++++---- 1-js/10-es-modern/9-iterator/article.md | 45 ++++-- 1-js/4-data-structures/7-array/array-pop.png | Bin 12634 -> 12719 bytes .../7-array/array-pop@2x.png | Bin 28981 -> 29253 bytes .../4-data-structures/7-array/array-shift.png | Bin 20587 -> 20798 bytes .../7-array/array-shift@2x.png | Bin 46001 -> 46546 bytes .../4-data-structures/7-array/array-speed.png | Bin 10852 -> 11394 bytes .../7-array/array-speed@2x.png | Bin 23950 -> 25069 bytes .../linked-list.png | Bin 5219 -> 5368 bytes .../linked-list@2x.png | Bin 11810 -> 12095 bytes .../9-array-iteration/reduce.png | Bin 10187 -> 10372 bytes .../9-array-iteration/reduce@2x.png | Bin 22209 -> 22545 bytes .../6-memory-management/family-no-family.png | Bin 19994 -> 20338 bytes .../family-no-family@2x.png | Bin 46213 -> 46815 bytes .../family-no-father-2.png | Bin 9862 -> 10180 bytes .../family-no-father-2@2x.png | Bin 22643 -> 22996 bytes .../6-memory-management/family-no-father.png | Bin 16369 -> 16531 bytes .../family-no-father@2x.png | Bin 38251 -> 38572 bytes .../6-memory-management/family.png | Bin 17331 -> 17474 bytes .../6-memory-management/family@2x.png | Bin 39557 -> 39866 bytes .../1-prototype/proto-animal-rabbit.png | Bin 7578 -> 7966 bytes .../1-prototype/proto-animal-rabbit@2x.png | Bin 17501 -> 18263 bytes .../native-prototypes-array-tostring.png | Bin 18613 -> 19637 bytes .../native-prototypes-array-tostring@2x.png | Bin 40803 -> 43151 bytes .../native-prototypes-classes.png | Bin 44747 -> 47148 bytes .../native-prototypes-classes@2x.png | Bin 98810 -> 103096 bytes .../native-prototypes-object.png | Bin 14070 -> 14652 bytes .../native-prototypes-object@2x.png | Bin 31376 -> 32622 bytes .../class-inheritance-array-object.png | Bin 17917 -> 18701 bytes .../class-inheritance-array-object@2x.png | Bin 40174 -> 41798 bytes .../class-inheritance-rabbit-animal.png | Bin 20052 -> 20976 bytes .../class-inheritance-rabbit-animal@2x.png | Bin 46042 -> 48186 bytes .../class-inheritance-rabbit-run-animal.png | Bin 21983 -> 23137 bytes ...class-inheritance-rabbit-run-animal@2x.png | Bin 49532 -> 51989 bytes .../1-browser-environment/windowObjects.png | Bin 24328 -> 24483 bytes .../windowObjects@2x.png | Bin 53830 -> 54163 bytes 2-ui/1-document/17-coordinates/coords.png | Bin 10228 -> 10367 bytes 2-ui/1-document/17-coordinates/coords@2x.png | Bin 24066 -> 24253 bytes .../4-traversing-dom/dom-links-elements.png | Bin 33183 -> 34106 bytes .../dom-links-elements@2x.png | Bin 69465 -> 71004 bytes .../1-document/4-traversing-dom/dom-links.png | Bin 31564 -> 32591 bytes .../4-traversing-dom/dom-links@2x.png | Bin 68508 -> 70415 bytes .../mouseover-mouseout-from-outside.png | Bin 10592 -> 10710 bytes .../mouseover-mouseout-from-outside@2x.png | Bin 22355 -> 22617 bytes .../mouseover-mouseout-over-elems.png | Bin 9283 -> 9619 bytes .../mouseover-mouseout-over-elems@2x.png | Bin 19985 -> 20652 bytes .../mouseover-mouseout.png | Bin 6094 -> 6319 bytes .../mouseover-mouseout@2x.png | Bin 12391 -> 12845 bytes .../mouseover-to-child.png | Bin 6273 -> 7135 bytes .../mouseover-to-child@2x.png | Bin 15620 -> 17525 bytes .../5-xhr-crossdomain/xhr-another-domain.png | Bin 29785 -> 30260 bytes .../xhr-another-domain@2x.png | Bin 65273 -> 66197 bytes 4-ajax/5-xhr-crossdomain/xhr-preflight.png | Bin 53929 -> 54410 bytes 4-ajax/5-xhr-crossdomain/xhr-preflight@2x.png | Bin 115089 -> 116077 bytes figures.sketch | Bin 10821632 -> 10838016 bytes 145 files changed, 412 insertions(+), 162 deletions(-) rename 1-js/10-es-modern/{15-promise => 11-promise}/1-promise-settimeout/solution.md (100%) rename 1-js/10-es-modern/{15-promise => 11-promise}/1-promise-settimeout/task.md (100%) create mode 100644 1-js/10-es-modern/11-promise/2-promise-sequence/solution.md rename 1-js/10-es-modern/{15-promise => 11-promise/2-promise-sequence/solution.view}/guest.json (100%) create mode 100644 1-js/10-es-modern/11-promise/2-promise-sequence/solution.view/httpGet.js create mode 100644 1-js/10-es-modern/11-promise/2-promise-sequence/solution.view/index.html rename 1-js/10-es-modern/{15-promise => 11-promise/2-promise-sequence/solution.view}/user.json (100%) create mode 100644 1-js/10-es-modern/11-promise/2-promise-sequence/source.view/guest.json create mode 100644 1-js/10-es-modern/11-promise/2-promise-sequence/source.view/httpGet.js create mode 100644 1-js/10-es-modern/11-promise/2-promise-sequence/source.view/index.html rename 1-js/10-es-modern/{17-generator => 11-promise/2-promise-sequence/source.view}/user.json (100%) create mode 100644 1-js/10-es-modern/11-promise/2-promise-sequence/task.md rename 1-js/10-es-modern/{15-promise => 11-promise}/anon.png (100%) rename 1-js/10-es-modern/{15-promise => 11-promise}/article.md (76%) create mode 100644 1-js/10-es-modern/11-promise/guest.json create mode 100644 1-js/10-es-modern/11-promise/promiseEcma.png create mode 100644 1-js/10-es-modern/11-promise/promiseEcma@2x.png create mode 100644 1-js/10-es-modern/11-promise/promiseHandlerVariants.png create mode 100644 1-js/10-es-modern/11-promise/promiseHandlerVariants@2x.png create mode 100644 1-js/10-es-modern/11-promise/promiseInit.png create mode 100644 1-js/10-es-modern/11-promise/promiseInit@2x.png create mode 100644 1-js/10-es-modern/11-promise/promiseLoadAvatarChain-1.png create mode 100644 1-js/10-es-modern/11-promise/promiseLoadAvatarChain-1@2x.png create mode 100644 1-js/10-es-modern/11-promise/promiseLoadAvatarChain-2.png create mode 100644 1-js/10-es-modern/11-promise/promiseLoadAvatarChain-2@2x.png create mode 100644 1-js/10-es-modern/11-promise/promiseLoadAvatarChain-3.png create mode 100644 1-js/10-es-modern/11-promise/promiseLoadAvatarChain-3@2x.png create mode 100644 1-js/10-es-modern/11-promise/promiseLoadAvatarChain-4.png create mode 100644 1-js/10-es-modern/11-promise/promiseLoadAvatarChain-4@2x.png rename 1-js/10-es-modern/{15-promise => 11-promise}/promiseLoadAvatarChain.png (100%) rename 1-js/10-es-modern/{15-promise => 11-promise}/promiseLoadAvatarChain@2x.png (100%) create mode 100644 1-js/10-es-modern/11-promise/promiseTwo.png create mode 100644 1-js/10-es-modern/11-promise/promiseTwo@2x.png rename 1-js/10-es-modern/{15-promise => 11-promise}/promiseTwoThen.png (73%) rename 1-js/10-es-modern/{15-promise => 11-promise}/promiseTwoThen@2x.png (74%) create mode 100644 1-js/10-es-modern/11-promise/promiseUserFlow.png create mode 100644 1-js/10-es-modern/11-promise/promiseUserFlow@2x.png create mode 100644 1-js/10-es-modern/11-promise/user.json rename 1-js/10-es-modern/{15-promise => 11-promise}/userNoGithub.json (100%) rename 1-js/10-es-modern/{17-generator => 12-generator}/anon.png (100%) rename 1-js/10-es-modern/{17-generator => 12-generator}/article.md (100%) create mode 100644 1-js/10-es-modern/12-generator/genYield2-2.png create mode 100644 1-js/10-es-modern/12-generator/genYield2-2@2x.png create mode 100644 1-js/10-es-modern/12-generator/genYield2-3.png create mode 100644 1-js/10-es-modern/12-generator/genYield2-3@2x.png create mode 100644 1-js/10-es-modern/12-generator/genYield2.png create mode 100644 1-js/10-es-modern/12-generator/genYield2@2x.png create mode 100644 1-js/10-es-modern/12-generator/generateSequence-1.png create mode 100644 1-js/10-es-modern/12-generator/generateSequence-1@2x.png create mode 100644 1-js/10-es-modern/12-generator/generateSequence-2.png create mode 100644 1-js/10-es-modern/12-generator/generateSequence-2@2x.png create mode 100644 1-js/10-es-modern/12-generator/generateSequence-3.png create mode 100644 1-js/10-es-modern/12-generator/generateSequence-3@2x.png create mode 100644 1-js/10-es-modern/12-generator/generateSequence-4.png create mode 100644 1-js/10-es-modern/12-generator/generateSequence-4@2x.png create mode 100644 1-js/10-es-modern/12-generator/user.json delete mode 100644 1-js/10-es-modern/15-promise/promiseEcma.png delete mode 100644 1-js/10-es-modern/15-promise/promiseEcma@2x.png delete mode 100644 1-js/10-es-modern/15-promise/promiseHandlerVariants.png delete mode 100644 1-js/10-es-modern/15-promise/promiseHandlerVariants@2x.png delete mode 100644 1-js/10-es-modern/15-promise/promiseInit.png delete mode 100644 1-js/10-es-modern/15-promise/promiseInit@2x.png delete mode 100644 1-js/10-es-modern/15-promise/promiseLoadAvatarChain-1.png delete mode 100644 1-js/10-es-modern/15-promise/promiseLoadAvatarChain-1@2x.png delete mode 100644 1-js/10-es-modern/15-promise/promiseLoadAvatarChain-2.png delete mode 100644 1-js/10-es-modern/15-promise/promiseLoadAvatarChain-2@2x.png delete mode 100644 1-js/10-es-modern/15-promise/promiseLoadAvatarChain-3.png delete mode 100644 1-js/10-es-modern/15-promise/promiseLoadAvatarChain-3@2x.png delete mode 100644 1-js/10-es-modern/15-promise/promiseLoadAvatarChain-4.png delete mode 100644 1-js/10-es-modern/15-promise/promiseLoadAvatarChain-4@2x.png delete mode 100644 1-js/10-es-modern/15-promise/promiseTwo.png delete mode 100644 1-js/10-es-modern/15-promise/promiseTwo@2x.png delete mode 100644 1-js/10-es-modern/15-promise/promiseUserFlow.png delete mode 100644 1-js/10-es-modern/15-promise/promiseUserFlow@2x.png delete mode 100644 1-js/10-es-modern/15-promise/user-no-guthub.json delete mode 100644 1-js/10-es-modern/17-generator/genYield2-2.png delete mode 100644 1-js/10-es-modern/17-generator/genYield2-2@2x.png delete mode 100644 1-js/10-es-modern/17-generator/genYield2-3.png delete mode 100644 1-js/10-es-modern/17-generator/genYield2-3@2x.png delete mode 100644 1-js/10-es-modern/17-generator/genYield2.png delete mode 100644 1-js/10-es-modern/17-generator/genYield2@2x.png delete mode 100644 1-js/10-es-modern/17-generator/generateSequence-1.png delete mode 100644 1-js/10-es-modern/17-generator/generateSequence-1@2x.png delete mode 100644 1-js/10-es-modern/17-generator/generateSequence-2.png delete mode 100644 1-js/10-es-modern/17-generator/generateSequence-2@2x.png delete mode 100644 1-js/10-es-modern/17-generator/generateSequence-3.png delete mode 100644 1-js/10-es-modern/17-generator/generateSequence-3@2x.png delete mode 100644 1-js/10-es-modern/17-generator/generateSequence-4.png delete mode 100644 1-js/10-es-modern/17-generator/generateSequence-4@2x.png diff --git a/1-js/10-es-modern/10-set-map/article.md b/1-js/10-es-modern/10-set-map/article.md index f255d860..f7f3f51c 100644 --- a/1-js/10-es-modern/10-set-map/article.md +++ b/1-js/10-es-modern/10-set-map/article.md @@ -1,12 +1,12 @@ # Set, Map, WeakSet и WeakMap -Новые типы коллекций в JavaScript: `Set`, `Map`, `WeakSet` и `WeakMap`. +В ES-2015 появились новые типы коллекций в JavaScript: `Set`, `Map`, `WeakSet` и `WeakMap`. ## Map -`Map` -- коллекция для хранения записей вида `ключ: значение`. +`Map` -- коллекция для хранения записей вида `ключ:значение`. В отличие от объектов, в которых ключами могут быть только строки, в `Map` ключом может быть произвольное значение, например: @@ -16,23 +16,32 @@ let map = new Map(); -map.set('1', 'str1'); // строка -map - .set(1, 'num1') // число - .set(true, 'bool1'); // булевое +map.set('1', 'str1'); // ключ-строка +map.set(1, 'num1'); // число +map.set(true, 'bool1'); // булевое значение -// в обычном объекте это было бы одно и то же +// в обычном объекте это было бы одно и то же, +// map сохраняет тип ключа alert( map.get(1) ); // 'num1' alert( map.get('1') ); // 'str1' alert( map.size ); // 3 ``` -Как видно из примера выше, для сохранения и чтения значений используются методы `get` и `set`, причём `set` можно чейнить. И ключи и значения сохраняются "как есть", без преобразований типов. +Как видно из примера выше, для сохранения и чтения значений используются методы `get` и `set`. И ключи и значения сохраняются "как есть", без преобразований типов. Свойство `map.size` хранит общее количество записей в `map`. -**При создании `Map` можно сразу инициализовать списком значений.** +Метод `set` можно чейнить: + +```js +map + .set('1', 'str1') + .set(1, 'num1') + .set(true, 'bool1'); +``` + +При создании `Map` можно сразу инициализовать списком значений. Объект `map` с тремя ключами, как и в примере выше: @@ -44,9 +53,9 @@ let map = new Map([ ]); ``` -Аргументом `new Map` должен быть итерируемый объект (не обязательно именно массив), которые должен возвратить объект с ключами `0`,`1` -- также не обязательно массив. Везде утиная типизация, максимальная гибкость. +Аргументом `new Map` должен быть итерируемый объект (не обязательно именно массив). Везде утиная типизация, максимальная гибкость. -**В качестве ключей можно использовать и объекты:** +**В качестве ключей `map` можно использовать и объекты:** ```js //+ run @@ -54,6 +63,7 @@ let map = new Map([ let user = { name: "Вася" }; +// для каждого пользователя будем хранить количество посещений let visitsCountMap = new Map(); *!* @@ -65,12 +75,12 @@ alert( visitsCountMap.get(user) ); // 123 ``` [smart header="Как map сравнивает ключи"] -Для проверки значений на эквивалентность используется алгоритм [SameValueZero](http://www.ecma-international.org/ecma-262/6.0/index.html#sec-samevaluezero). Он аналогичен строгому равенству `===`, отличие -- в том, что `NaN` считается равным `NaN`. +Для проверки значений на эквивалентность используется алгоритм [SameValueZero](http://www.ecma-international.org/ecma-262/6.0/index.html#sec-samevaluezero). Он аналогичен строгому равенству `===`, отличие -- в том, что `NaN` считается равным `NaN`. Поэтому значение `NaN` также может быть использовано в качестве ключа. -Этот алгоритм жёстко фиксирован в стандарте, его нельзя изменять или задавать свою функцию для него. +Этот алгоритм жёстко фиксирован в стандарте, его нельзя изменять или задавать свою функцию сравнения. [/smart] -Для удаления записей: +Методы для удаления записей: -Ещё раз заметим, что используемый алгоритм сравнения ключей аналогичен `===`, за исключением `NaN`, которое равно самому себе: - -```js -//+ run -'use strict'; - -let map = new Map([ [NaN: 1] ]); - -alert( map.has(NaN) ); // true -alert( map.get(NaN) ); // 1 -alert( map.delete(NaN) ); // true -``` - ### Итерация -Для итерации используется один из трёх методов: +Для итерации по `map` используется один из трёх методов: