---
layout: post
title: JavaScript notes I
tags:
    - javascript
## Make sure to change these
published: true
sitemap: true
---

Let's review  some JavaScript features in a hurry!

## Iterables

Objects that can be used in `for..of` are called iterable.

Iterables must implement the method named `Symbol.iterator`. The result
of `obj[Symbol.iterator]` is called an iterator.  An iterator must have
the method named `next()` that returns an object `{done: Boolean, value:
any}`, the value is the next value.  The `Symbol.iterator` method is
called automatically by `for..of`, but we also can do it directly.

`Array.from(obj[, mapFn, thisArg])` makes a real Array of an iterable or
array-like obj, and we can then use array methods on it. The optional
arguments mapFn and thisArg allow us to apply a function to each item.


## Destructuring

Map an object or array to variables.

Object syntax:

    let {prop : varName = default, ...} = object

Array syntax:

    let [item1 = default, item2, ...rest] = array

The first item goes to `item1`; the second goes into `item2`, all the rest
makes the array rest.


## Map and Set

`Map`, is a collection of keyed values, it allows objects to be keys and
provides a `size` property.

`Set`, is a collection of unique values, does not allow to reorder elements.

The following allow garbage-collection:
There ara also `WeakMap` and `WeakSet` which provide garbage collection,
I need to research more about these. Maybe the next post.