[undefined]// x объявлен
var x;
if (x === undefined) {}
if (x === void 0) {}
 
// x не объявлен
if (typeof x === "undefined") {}[null]let container;
 
container = {};
container = Object();
container = new Object();
container = Object.create(prototype, props);[true; false]let flag;
 
flag = false;
typeof flag; // boolean
flag = Boolean(false);
typeof flag; // boolean
 
flag = new Boolean(flag);
typeof flag; // object
 
flag = flag.valueOf();
typeof flag; // booleanflag = Boolean(); // false
flag = Boolean(document.all); // falseflag = new Boolean(false);
if (flag) {
  // ???
}flag = new Boolean(false);
typeof flag; // object
if (flag) {
  // будет выполнено    
}[0; FFFF₁₆]{0, 2⁵³-1}let container;
 
container = "Содержимое";
typeof container; // string
 
container = String("Содержимое");
typeof container; // string
 
container = new String(container);
typeof container; // object
 
container = container.valueOf();
typeof container; // stringcontainer = "Содержимое";
typeof container; // string
container.charAt(2); // д
typeof container; // string
container[2]; // дcontainer = "Cтрока 1" + 
            "Cтрока 2" +
            "Cтрока 3";
 
container = "Cтрока 1 \ 
             Cтрока 2 \
             Cтрока 3";`Литерал``Строка 1
 Строка 2`let name = "Валера"
  , result;
result = `А где же наш ${name}?`
result; // А где же наш Валера?let  result
  , price = 234
  , tax = price * 0.05;
result = `Товар стоит ${(price + tax).toFixed(2)} ₴`
result; // Товар стоит 245.70 ₴currency`Товар стоит 
         ${price + tax}:c(UAH,uk-ua), 
         так то.`;
// Товар стоит 245,70 грн., так то.
 
currency`Товар стоит 
         ${price + tax}:c(JPY,ja-JP), 
         так то.`;
// Товар стоит ¥246, так то.function currency(strings, ...values) {
 // string = ["Товар стоит ", ":c(UAH,uk-ua), так то."]
 // values = [245.7]
 // …
}// …
const regExp = /^:c(\((.+),(.+)\))?/;
let strings_set = [...strings]
  , values_set = [...values];
// …// …
for (let key in values_set) {
    const index = +key+1
        , string = strings_set[index]
        , match = regExp.exec(string);
    // …
}
// …// …
if (match === null) continue;
// …// …
// [":c(UAH,uk-ua)", "(UAH,uk-ua)", "UAH", "uk-ua"]
const [ , , currency, locale] = match;
strings_set[index] = strings_set[index]
                      .replace(regExp, "");
values_set[key] = values_set[key]
                      .toLocaleString(locale, {
                          style: 'currency'
                        , currency: currency });
// …// …
return String.raw({
  raw: strings_set
 }, ...values_set);[-(2⁵³ - 1); +(2⁵³ - 1)]
+0
-0
+Infinity
−Infinity
NaN-1/0; // -Infinity
Infinity/Infinity; // NaN
-1/Infinity; // -0
Math.round(-0.1); // -0NaN === NaN; // false
+0 === -0; // truelet container;
 
container = 123.12;
typeof container; // number
 
container = Number(123.12);
typeof container; // number
 
container = new Number(container);
typeof container; // object
 
container = container.valueOf();
typeof container; // number23.51 // десятичная
2351e-2 // научный формат, 23.51
0x10 // шеснадцатеричная, 16
0b10 // бинарная, 2
0o10 // восьмиричная, 8let x = 10;
x.toString(16); // a
x.toString(8); // 12
x.toString(6); // 14
x.toString(2); // 1010
x.toExponential(1); // 1.0e+10.2 + 0.1 !== 0.3 
// 0.30000000000000004
0.2.toFixed(20) 
// 0.20000000000000001110
0.1.toString(2) 
// 0.000110011001100[1100](
  Math.abs(
        (0.2 + 0.1) - 0.3 
  ) < Number.EPSILON
); // trueNumber.isNaN('???') //false
isNaN('???') //true12.34.toPrecision();  // 12.34
12.34.toString();     // 12.34
12.34.toPrecision(5); // 12.340
12.34.toPrecision(4); // 12.34
12.34.toPrecision(3); // 12.3
12.34.toPrecision(2); // 12
12.34.toPrecision(1); // 1e+10.002345.toPrecision(5); // 0.0023450
0.002345.toPrecision(4); // 0.002345
0.002345.toPrecision(3); // 0.00234
0.002345.toPrecision(2); // 0.0023
0.002345.toPrecision(1); // 0.0020.002385.toFixed(5); // 0.00238
0.002386.toFixed(5); // 0.00239
0.002385.toFixed(4); // 0.0024
0.002385.toFixed(3); // 0.002
0.002385.toFixed(2); // 0.00
0.002385.toFixed(1); // 0.0
0.002385.toFixed(0); // 010..toFixed(5); // 10.00000// .toLocaleString([locales [, options]])
10000000..toLocaleString(); // 10,000,000
10000000..toLocaleString('RU'); // 10 000 000
10000000..toLocaleString('DE'); // 10.000.000// .toLocaleString([locales [, options]])
10000000..toLocaleString(); 
// 10,000,000
10000000..toLocaleString('RU'); 
// 10 000 000
10000000..toLocaleString('DE'); 
// 10.000.00010000000..toLocaleString('en-US', {
  style: "currency",
  currency: "USD"   
}); // $10,000,000.0010000000..toLocaleString('RU', {
  style: "currency",
  currency: "RUB"   
}); // 10 000 000,00 ₽10000000..toLocaleString('DE', {
  style: "currency",
  currency: "EUR"   
}); // 10.000.000,00 €let key_name;
 
// Уникальный символ
key_name = Symbol(); 
key_name = Symbol("Пространное описание"); 
 
// Символ, который будет внесен в реестр символов
key_name = Symbol.for("Пространное описание"); 
this[key_name] = "Значение";let key_1, key_2;
 
key_1 = Symbol("Пространное описание");
key_2 = Symbol("Пространное описание"); 
(key_1 === key_2) // false
 
key_1 = Symbol.for("Пространное описание");
key_2 = Symbol.for("Пространное описание"); 
(key_1 === key_2) // truekey_name = new Symbol(); // TypeError
key_name = Symbol();
typeof key_name; // "symbol" 
key_name = Object(key_name);
typeof key_name; // "object" 
key_name = key_name[Symbol.toPrimitive]('symbol');
typeof key_name; // "symbol" this[key_name] = "Значение";let obj = {"a": 123}
  , key = Symbol.for('Пространное описание');
obj[key] = "Некое значение";
Object.getOwnPropertySymbols(obj);
// [Symbol(Пространное описание)]for (let x of obj) {} // Работает как обычно
for (let x in obj) {} // Игнорирует символы| Undefined | input | 
| Null | input | 
| Number | input | 
| Boolean | input | 
| String | input | 
| Symbol | input | 
| Object | Хитрый алгоритм | 
| Undefined | false | 
| Null | false | 
| Number | false для [+0; -0; NaN] или true | 
| String | false для [""] или true | 
| Symbol | true | 
| Object | true | 
(value === 'true');  // true
typeof (value === 'true');  // boolean
!!+"1"; // true
typeof !!+"1"; // boolean| Undefined | NaN | 
| Null | +0 | 
| Boolean | 1 если true, 0 если false | 
| String |  
  | 
| Symbol | TypeError | 
| Object |  
  | 
parseInt(value, 10);
parseFloat(value);
+value;
Number(value);| Undefined | "undefined" | 
| Null | "null" | 
| Boolean | "true" если true, "false" если false | 
| Symbol | TypeError | 
| Object |  
  | 
| Number |  "NaN" если NaN "0" если +0 или -0 "Infinity" если +∞ "-" + toString(arg) если значение меньше 0 число N переводим в UTF-16  | 
value.toString(); 
// не работает с null
// не работает с undefined
"" + value;
String(value);| Undefined | TypeError | 
| Null | TypeError | 
| Boolean | Новый объект Boolean | 
| Number | Новый объект Number | 
| String | Новый объект String | 
| Symbol | Новый объект Symbol | 
{} + {}; // ?
[] + {}; // ?
{} + []; // ?
[] + []; // ?1 + true; // ?
1 + {}; // ?
{} + 1; // ?"1" + 3; // ?
"123"/1; // ?
"123 12"/1; // ?Антон Немцев
@silentimp
http://silentimp.info/
anton.nemtsev@vaimo.com
skype: ravencry