[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