[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; // boolean
flag = Boolean(); // false
flag = Boolean(document.all); // false
flag = 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; // string
container = "Содержимое";
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); // -0
NaN === NaN; // false
+0 === -0; // true
let 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; // number
23.51 // десятичная
2351e-2 // научный формат, 23.51
0x10 // шеснадцатеричная, 16
0b10 // бинарная, 2
0o10 // восьмиричная, 8
let x = 10;
x.toString(16); // a
x.toString(8); // 12
x.toString(6); // 14
x.toString(2); // 1010
x.toExponential(1); // 1.0e+1
0.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
); // true
Number.isNaN('???') //false
isNaN('???') //true
12.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+1
0.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.002
0.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); // 0
10..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.000
10000000..toLocaleString('en-US', {
style: "currency",
currency: "USD"
}); // $10,000,000.00
10000000..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) // true
key_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