4. 4
Примитивы
• String, Boolean, Number
• Можно вызывать методы как у объекта
• В памяти хранятся как константы
– Менять нельзя
– Можно переписывать значение переменной
5. 5
Можно работать как с объектами
'string'.length; // 6
'name'.match(/^na/); // ["na"]
'name'.indexOf('a'); // 1
Работа с примитивами
7. 7
String
• Создается из литерала "string" или 'string'
• Внутренняя кодировка UTF-8
– "ジャバスクリプト".length – 8
– Исключение – символы UTF-16
• К элементам можно обращаться как в
массиве
– Кроме IE6 - .charAt(0)
• Строки можно складывать через +
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String
11. 11
Number
• Все числа с плавающей точкой
• Можно записывать в 4 вариантах
– В десятеричной системе 105
– В 16-ричной 0x10
– В 8-ричной 010 – Deprecated!
– В экспоненциальной 1.5e3
• NaN – Not a Number
• +Infinity, -Infinity
• Объект Math
– .floor() .random()
• isNaN(), isFinite(), parseInt()
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number
22. 22
Object
• Записывается литералом {}
• Это хэш
• Имена полей – это строка или число
• Можно динамически менять поля
– У любого объекта
– Добавлять
– Удалять
• Null – нулевой, несуществующий объект
25. 25
Function
• Это вызываемый Объект
• Можно дописывать любые свойства
• Можно передавать куда угодно
• Нет проверки на число аргументов
• Легко перегружать
• Создает область видимости
26. 26
A(123); // Ok
function A(b) {
if (typeof b === "string") {
throw new TypeError("should be number");
}
return b * 2;
}
A.length; // 1
Пример функций
27. 27
A(123); // Error – функции еще нет
var A = function(b) {
if (typeof b === "string") {
throw new TypeError("should be number");
}
return b * 2;
}
A(1); // Ok
A.length; // 1
Пример функций
32. 32
Statement
• Блочное выражение
– if (){}, try{}catch(e){}, function a(){}
• Директива интерпретатору
– return, throw, break, continue, var, …
• Может включать другие блочные выражения
• Может включать выражения
• Не возвращает значение
• Не может быть аргументом Expression
• Можно сделать из Expression – Expression;
http://es5.github.com/#x12
33. 33
Expression
• Оператор
– С одним аргументом typeof, !, (), ++, --, new, +,…
– С двумя ==, ===, >, <, instanceof, +, -,…
– С тремя a?b:c,…
– Вызов функции
– Оператор запятая
• Может включать другие операторы
• Не может включать Statement
• Возвращает значение
• Может быть в составе Statement
http://es5.github.com/#x11
39. 39
Блок var
• Это Statement
• Объявляет имя переменной в текущей
области видимости
40. 40
function A() {
// Переменная i существует уже тут!
typeof i === "undefined";
i = 5; // OK!
for (var i = 0; i < 10; i++) {
console.log(i);
}
}
// Не выходит за границы
typeof i === "undefined";
A();
Пример var
41. 41
Фактически это выглядит так
function A() {
var i; // <<<
typeof i === "undefined";
i = 5; // OK!
for (i = 0; i < 10; i++) { // <<<
console.log(i);
}
}
// Не выходит за границы
typeof i === "undefined";
A();
Пример var
42. 42
Оператор delete
• Это Expression
• Удаляет ссылку на объект, а не сам объект
• Возвращает Boolean
– true – ссылка удалилась
– false – ссылка осталась
43. 43
var a = {c: 1},
b = a;
delete a; // false
a = void 0;
typeof b === "object";
delete b.c; // true
Оператор delete – пример
44. 44
Оператор delete – в памяти
a
b
Object
c
1
undefined
a = {c: 1}
a = void 0
b = a
delete b.c
45. 45
Оператор typeof
Внутренний тип* Результат
Undefined "undefined"
Null "object"
Boolean "boolean"
Number "number"
String "string"
Object "object"
Function "function"
Array "object"
http://es5.github.com/#x11.4.3
Это Expression, возвращает String.
Алгоритм
- Ссылка не достижима (IsUnresolvableReference) – возвращаем "undefined"
- Иначе смотрим по таблице
46. 46
typeof [] === "object"; // !!!
typeof null === "object"; // !!!
typeof NaN === "number"; // !!!
typeof Infinity === "number"; // Ok
typeof {} === "object"; // Ok
typeof function(){} === ”function”;
Пример
47. 47
Операторы || и &&
• || – логическое или
– Если первый аргумент можно привести к true – возвращаем его
– Иначе возвращаем/выполняем второй
– В JS применяется для установки значения по умолчанию
• && – логическое и
– Если первый аргумент приводится к false – возвращаем его
– Иначе возвращаем/выполняем второй
– Применяется для "коротких" if()
48. 48
// Значения по умолчанию
// - Рекомендуется к использованию ;-)
function myObject(data) {
data = data || {};
data.name = data.name || 'Default';
}
myObject(); // {name: "Default"}
Пример ||
49. 49
// Короткий if
// - Запись не явная
// - НЕ рекомендуется использовать
var a = true;
if (a) {
alert('ok');
}
// Это аналогично
a && alert('ok');
Пример &&