JavaScript. Basics (in russian)

51

Transcript of JavaScript. Basics (in russian)

Page 1: JavaScript. Basics (in russian)
Page 2: JavaScript. Basics (in russian)

Михаил Давыдов Разработчик JavaScript

JavaScript Основы

Page 3: JavaScript. Basics (in russian)

Базовые типы

String

Number

Boolean

Undefined

Object

- Function, Array, …

Page 4: JavaScript. Basics (in russian)

4

Примитивы

• String, Boolean, Number • Можно вызывать методы как у объекта • В памяти хранятся как константы

–  Менять нельзя –  Можно переписывать значение переменной

Page 5: JavaScript. Basics (in russian)

5

Можно работать как с объектами

'string'.length; // 6 'name'.match(/^na/); // ["na"] 'name'.indexOf('a'); // 1

Работа с примитивами

Page 6: JavaScript. Basics (in russian)

String

Page 7: JavaScript. Basics (in russian)

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

Page 8: JavaScript. Basics (in russian)

8

"string"; "s'tri'ng"; 'str\'ing'; "str" + 'ing'; // "string"; "a,b,c".split(','); // ["a", "b", "c"]

Пример

Page 9: JavaScript. Basics (in russian)

9

// Конкатенация с "" 1 + ""; // "1" // Можно привести явно 1.toString(); // "1" String(1); // "object"

Приведение к строке

Page 10: JavaScript. Basics (in russian)

Number

Page 11: JavaScript. Basics (in russian)

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

Page 12: JavaScript. Basics (in russian)

12

10 + 0x10; // 26 5 / 2 = 2.5; (10.15158).toFixed(2); // "10.15" – строка! .3; // == 0.3 5.; // 5 Math.round(5.1); // 5 isNaN(0 / 0); // true isFinite(1 / 0); // false

Пример

Page 13: JavaScript. Basics (in russian)

13

// parseInt parseInt("10", 10); // 10 parseInt("a", 10); // NaN parseInt("a", 16); // 10 parseInt("01011", 2); // 11 parseInt("10px", 10); // 10!! // Можно проще +"10"; // 10

Привод к числу

Page 14: JavaScript. Basics (in russian)

Boolean

Page 15: JavaScript. Basics (in russian)

15

Boolean

• Записывается литералами true, false

Page 16: JavaScript. Basics (in russian)

16

"1" == true; // true "" == true; // false !!1; // true

Привод к булеану

Page 17: JavaScript. Basics (in russian)

Undefined

Page 18: JavaScript. Basics (in russian)

18

Undefined

• Этот тип имеют все переменные без значения

Page 19: JavaScript. Basics (in russian)

19

var a; typeof a === "undefined"; a = 0; typeof a === "number"; function b(c){ typeof c === "undefined"; } b();

Пример

Page 20: JavaScript. Basics (in russian)

20

Проверка на Undefined

• someVar === undefined; // Bad • someVar == null; // Bad • someVar === void 0; // Ok • typeof someVar === "undefined";

Page 21: JavaScript. Basics (in russian)

Object

Page 22: JavaScript. Basics (in russian)

22

Object

• Записывается литералом {} • Это хэш • Имена полей – это строка или число • Можно динамически менять поля

–  У любого объекта –  Добавлять –  Удалять

• Null – нулевой, несуществующий объект

Page 23: JavaScript. Basics (in russian)

23

var a = { "b": 123, '--c': function () { return 1; } d: {} }; a.d; // {} a['--c'](); // 1 a['--' + 'c'](); // 1 a.b === 123; // true a[0] = 45; typeof a[0] === "number"; typeof a[1] === "undefined";

Пример

Page 24: JavaScript. Basics (in russian)

Function

Page 25: JavaScript. Basics (in russian)

25

Function

• Это вызываемый Объект • Можно дописывать любые свойства • Можно передавать куда угодно • Нет проверки на число аргументов • Легко перегружать • Создает область видимости

Page 26: JavaScript. Basics (in russian)

26

A(123); // Ok function A(b) { if (typeof b === "string") { throw new TypeError("should be number"); } return b * 2; } A.length; // 1

Пример функций

Page 27: JavaScript. Basics (in russian)

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

Пример функций

Page 28: JavaScript. Basics (in russian)

Array

Page 29: JavaScript. Basics (in russian)

29

Array

• Это специальный Объект • Можно дописывать любые поля

–  Не обязательно числовые

Page 30: JavaScript. Basics (in russian)

30

typeof [] === "object"; // !!! var a = [1, 2, 3, 4]; a[1] *= 2; a.length; // 4 a + ''; // "1,2,3,4" a.push(5); // .splice(), .pop(), .shift(), .unshift() ... a.map(function (item) { return Math.sin(Math.PI / item); }); a['pewpew-ololo'] = 'ufo';

Пример

Page 31: JavaScript. Basics (in russian)

Операторы и блоки

Expression (Выражение, Оператор),

Statement (Блочное выражение, Блок)

Page 32: JavaScript. Basics (in russian)

32

Statement

• Блочное выражение –  if (){}, try{}catch(e){}, function a(){}

•  Директива интерпретатору –  return, throw, break, continue, var, …

• Может включать другие блочные выражения • Может включать выражения • Не возвращает значение • Не может быть аргументом Expression • Можно сделать из Expression – Expression;

http://es5.github.com/#x12

Page 33: JavaScript. Basics (in russian)

33

Expression

• Оператор –  С одним аргументом typeof, !, (), ++, --, new, +,… –  С двумя ==, ===, >, <, instanceof, +, -,… –  С тремя a?b:c,… –  Вызов функции –  Оператор запятая

• Может включать другие операторы • Не может включать Statement • Возвращает значение • Может быть в составе Statement

http://es5.github.com/#x11

Page 34: JavaScript. Basics (in russian)

Приведение типов

Page 35: JavaScript. Basics (in russian)

35

Приведение типов

• Утиная типизация • Зависит от оператора

–  Оператор имеет определенный алгоритм

• Зависит от типа аргументов и мест

Page 36: JavaScript. Basics (in russian)

36

Сильно перегружен: сложение чисел, конкатенация строк

"2" + 3; // "23" 2 + 3; // 5 "2" + {}; // "2[object Object]" [] + []; // "" Пустая строка

Пример: оператор +

Page 37: JavaScript. Basics (in russian)

37

The Abstract Equality Comparison Algorithm http://es5.github.com/#x11.9.3

'' === '0' // false 0 === '' // false 0 === '0' // false false === undefined // false false === null // false null === undefined // false +0 === -0 // true

Операторы == и ===

'' == '0' // false 0 == '' // true 0 == '0' // true false == undefined // false false == null // false null == undefined // true The Strict Equality Comparison Algorithm http://es5.github.com/#x11.9.6

Page 38: JavaScript. Basics (in russian)

Важные операторы

var

delete

typeof

|| и &&

Page 39: JavaScript. Basics (in russian)

39

Блок var

• Это Statement • Объявляет имя переменной в текущей области видимости

Page 40: JavaScript. Basics (in russian)

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

Page 41: JavaScript. Basics (in russian)

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

Page 42: JavaScript. Basics (in russian)

42

Оператор delete

• Это Expression • Удаляет ссылку на объект, а не сам объект • Возвращает Boolean

–  true – ссылка удалилась –  false – ссылка осталась

Page 43: JavaScript. Basics (in russian)

43

var a = {c: 1}, b = a; delete a; // false a = void 0; typeof b === "object"; delete b.c; // true

Оператор delete – пример

Page 44: JavaScript. Basics (in russian)

44

Оператор delete – в памяти

a

b

Object c

1  

undefined  

a = {c: 1}

a = void 0 b = a

delete b.c

Page 45: JavaScript. Basics (in russian)

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" - Иначе смотрим по таблице

Page 46: JavaScript. Basics (in russian)

46

typeof [] === "object"; // !!! typeof null === "object"; // !!! typeof NaN === "number"; // !!! typeof Infinity === "number"; // Ok typeof {} === "object"; // Ok typeof function(){} === ”function”;

Пример

Page 47: JavaScript. Basics (in russian)

47

Операторы || и &&

•  || – логическое или –  Если первый аргумент можно привести к true – возвращаем его –  Иначе возвращаем/выполняем второй –  В JS применяется для установки значения по умолчанию

• && – логическое и –  Если первый аргумент приводится к false – возвращаем его –  Иначе возвращаем/выполняем второй –  Применяется для "коротких" if()

Page 48: JavaScript. Basics (in russian)

48

// Значения по умолчанию // - Рекомендуется к использованию ;-) function myObject(data) { data = data || {}; data.name = data.name || 'Default'; } myObject(); // {name: "Default"}

Пример ||

Page 49: JavaScript. Basics (in russian)

49

// Короткий if // - Запись не явная // - НЕ рекомендуется использовать var a = true; if (a) { alert('ok'); } // Это аналогично a && alert('ok');

Пример &&

Page 50: JavaScript. Basics (in russian)

50

Заключение

• Базовые типы –  String –  Number –  Boolean –  Undefined –  Object: Array, Function, …

• Statement • Expression • Хитрые операторы и блоки

–  var –  typeof –  delete –  void

Page 51: JavaScript. Basics (in russian)

Михаил Давыдов

Разработчик JavaScript

[email protected] azproduction

Спасибо