КРиПИ - Основы JavaScript

КРиПИ - Основы JavaScript

B827d6cfdfbcfce33700b0e6cc03e344?s=128

Mikhail Davydov

October 11, 2012
Tweet

Transcript

  1. 1.
  2. 4.

    4 Примитивы •  String, Boolean, Number •  Можно вызывать методы

    как у объекта •  В памяти хранятся как константы –  Менять нельзя –  Можно переписывать значение переменной
  3. 5.

    5 Можно работать как с объектами 'string'.length; // 6 'name'.match(/^na/);

    // ["na"] 'name'.indexOf('a'); // 1 Работа с примитивами
  4. 6.
  5. 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
  6. 9.

    9 // Конкатенация с "" 1 + ""; // "1"

    // Можно привести явно 1.toString(); // "1" String(1); // "object" Приведение к строке
  7. 10.
  8. 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
  9. 12.

    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 Пример
  10. 13.

    13 // parseInt parseInt("10", 10); // 10 parseInt("a", 10); //

    NaN parseInt("a", 16); // 10 parseInt("01011", 2); // 11 parseInt("10px", 10); // 10!! // Можно проще +"10"; // 10 Привод к числу
  11. 14.
  12. 16.

    16 "1" == true; // true "" == true; //

    false !!1; // true Привод к булеану
  13. 17.
  14. 19.

    19 var a; typeof a === "undefined"; a = 0;

    typeof a === "number"; function b(c){ typeof c === "undefined"; } b(); Пример
  15. 20.

    20 Проверка на Undefined •  someVar === undefined; // Bad

    •  someVar == null; // Bad •  someVar === void 0; // Ok •  typeof someVar === "undefined";
  16. 21.
  17. 22.

    22 Object •  Записывается литералом {} •  Это хэш • 

    Имена полей – это строка или число •  Можно динамически менять поля –  У любого объекта –  Добавлять –  Удалять •  Null – нулевой, несуществующий объект
  18. 23.

    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"; Пример
  19. 24.
  20. 25.

    25 Function •  Это вызываемый Объект •  Можно дописывать любые

    свойства •  Можно передавать куда угодно •  Нет проверки на число аргументов •  Легко перегружать •  Создает область видимости
  21. 26.

    26 A(123); // Ok function A(b) { if (typeof b

    === "string") { throw new TypeError("should be number"); } return b * 2; } A.length; // 1 Пример функций
  22. 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 Пример функций
  23. 28.
  24. 30.

    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'; Пример
  25. 32.

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

    a(){} •  Директива интерпретатору –  return, throw, break, continue, var, … •  Может включать другие блочные выражения •  Может включать выражения •  Не возвращает значение •  Не может быть аргументом Expression •  Можно сделать из Expression – Expression; http://es5.github.com/#x12
  26. 33.

    33 Expression •  Оператор –  С одним аргументом typeof, !,

    (), ++, --, new, +,… –  С двумя ==, ===, >, <, instanceof, +, -,… –  С тремя a?b:c,… –  Вызов функции –  Оператор запятая •  Может включать другие операторы •  Не может включать Statement •  Возвращает значение •  Может быть в составе Statement http://es5.github.com/#x11
  27. 35.

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

    –  Оператор имеет определенный алгоритм •  Зависит от типа аргументов и мест
  28. 36.

    36 Сильно перегружен: сложение чисел, конкатенация строк "2" + 3;

    // "23" 2 + 3; // 5 "2" + {}; // "2[object Object]" [] + []; // "" Пустая строка Пример: оператор +
  29. 37.

    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
  30. 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
  31. 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
  32. 42.

    42 Оператор delete •  Это Expression •  Удаляет ссылку на

    объект, а не сам объект •  Возвращает Boolean –  true – ссылка удалилась –  false – ссылка осталась
  33. 43.

    43 var a = {c: 1}, b = a; delete

    a; // false a = void 0; typeof b === "object"; delete b.c; // true Оператор delete – пример
  34. 44.

    44 Оператор delete – в памяти a b Object c

    1   undefined   a = {c: 1} a = void 0 b = a delete b.c
  35. 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" - Иначе смотрим по таблице
  36. 46.

    46 typeof [] === "object"; // !!! typeof null ===

    "object"; // !!! typeof NaN === "number"; // !!! typeof Infinity === "number"; // Ok typeof {} === "object"; // Ok typeof function(){} === ”function”; Пример
  37. 47.

    47 Операторы || и && •  || – логическое или

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

    48 // Значения по умолчанию // - Рекомендуется к использованию

    ;-) function myObject(data) { data = data || {}; data.name = data.name || 'Default'; } myObject(); // {name: "Default"} Пример ||
  39. 49.

    49 // Короткий if // - Запись не явная //

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

    50 Заключение •  Базовые типы –  String –  Number – 

    Boolean –  Undefined –  Object: Array, Function, … •  Statement •  Expression •  Хитрые операторы и блоки –  var –  typeof –  delete –  void