Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JS (2 of 4)

Avatar for subzey subzey
February 18, 2013

JS (2 of 4)

Avatar for subzey

subzey

February 18, 2013
Tweet

More Decks by subzey

Other Decks in Programming

Transcript

  1. Свойства Методы — тоже свойства. var myArray = new Array();

    myArray[0] = 1; myArray.push(2); console.log(myArray.length); // 2
  2. Свойства Методы — тоже свойства. И элементы массива — тоже.

    var myArray = new Array(); myArray[0] = 1; myArray.push(2); console.log(myArray.length); // 2
  3. Аксессоры [ ] и . равноправны var myArray = new

    Array(); myArray[0] = 1; myArray.push(2); console.log(myArray.length); // 2
  4. Аксессоры [ ] и . равноправны var myArray = new

    Array(); myArray[0] = 1; myArray.push(2); console.log(myArray.length); // 2 var myArray = new Array(); myArray[0] = 1; myArray["push"](2); console["log"](myArray["length"]); // 2
  5. var myObject = { foo: 42; }; var propertyName =

    "foo"; /* ... */ eval("myObject." + foo); // 42
  6. var myObject = { foo: 42; }; var propertyName =

    "foo"; /* ... */ eval("myObject." + foo); // 42 myObject[foo]; // 42
  7. Свойства [1,2,3].length; // 3 "abc".length; // 3 /regExp/.source; // "regExp"

    Методы [1,2,3].push(4); "abc".toUpperCase(); /regExp/.exec("str");
  8. Свойства [1,2,3].length; // 3 "abc".length; // 3 /regExp/.source; // "regExp"

    Методы [1,2,3].push(4); "abc".toUpperCase(); /regExp/.exec("str"); Методы — это тоже свойства, только функции, больше никаких отличий нет.
  9. При необходимости примитивы преобразуются в объекты. var str = "Hello

    world!"; str.length; // 12 string s — Cвойство «length»? — Это примитив, у них не бывает свойств.
  10. При необходимости примитивы преобразуются в объекты. var str = "Hello

    world!"; str.length; // 12 string s — Cвойство «length»? — Это примитив, у них не бывает свойств. — Тогда преобразуй в объект!
  11. При необходимости примитивы преобразуются в объекты. var str = "Hello

    world!"; str.length; // 12 string s [object String] — Cвойство «length»?
  12. При необходимости примитивы преобразуются в объекты. var str = "Hello

    world!"; str.length; // 12 string s [object String] — Cвойство «length»? — 12
  13. Присваивать примитивам свойства бесполезно. var str = "Hello world!"; str.foo

    = 42; str.foo; // undefined string s — Установи свойство «foo» равное 42!
  14. Присваивать примитивам свойства бесполезно. var str = "Hello world!"; str.foo

    = 42; str.foo; // undefined string s — Установи свойство «foo» равное 42! — Это примитив, у них не бывает свойств.
  15. Присваивать примитивам свойства бесполезно. var str = "Hello world!"; str.foo

    = 42; str.foo; // undefined string s — Установи свойство «foo» равное 42! — Это примитив, у них не бывает свойств. — Преобразуй в объект!
  16. Присваивать примитивам свойства бесполезно. var str = "Hello world!"; str.foo

    = 42; str.foo; // undefined string s [object String] foo: 42 — Установи свойство «foo» равное 42! — OK
  17. Присваивать примитивам свойства бесполезно. var str = "Hello world!"; str.foo

    = 42; str.foo; // undefined string s [object String] foo: 42 — Свойство «foo»? — Это примитив. — Преобразуй в объект!
  18. Присваивать примитивам свойства бесполезно. var str = "Hello world!"; str.foo

    = 42; str.foo; // undefined string s [object String] foo: 42 — Свойство «foo»? — Нет такого. [object String]
  19. Преобразования в объект Object объекты Object Array Array Function Function

    RegExp RegExp Arguments Arguments string примитивы String number Number boolean Boolean undefined — null —
  20. < >

  21. Объекты присваиваются по ссылке var myObject = {}; var myOtherObject

    = myObject; myOtherObject.foo = 42; myOtherObject.foo; // 42 myObject.foo; // 42
  22. Объекты передаются по ссылке function fooize(o){ o.foo = 42; };

    var myObject = {}; fooize(myObject); myObject.foo; // 42
  23. this var o = {}; o.setFoo = function(fooValue){ this.foo =

    fooValue; }; o.setFoo(42); o.foo; // 42
  24. this В JavaScript this указывает на тот объект, на котором

    метод был вызван, а не тот, на котором определен.
  25. this var array1 = []; var array2 = []; array1.add

    = function(value){ this.push(value); }; array2.add = array1.add; array2.add(42); array1; // [] array2; // [42]
  26. this Чтобы применить функцию (метод), не обязательно её присваивать объекту.

    var array1 = []; var array2 = []; array1.add = function(value){ this.push(value); }; array1.add.call(array2, 42); array1; // [] array2; // [42]
  27. this Чтобы применить функцию (метод), не обязательно её присваивать объекту.

    var array1 = []; var array2 = []; array1.add = function(value){ this.push(value); }; array1.add.apply(array2, [42]); array1; // [] array2; // [42]
  28. [[class]] У каждого объекта есть внутреннее свойство [[class]]. ({}).toString(); //

    "[object Object]" ({}).toString.call([]); // "[object Array]" ({}).toString.call( function(){} ); // "[object Function]" ({}).toString.call( document.createElement("div") ); // "[object HTMLDivElement]"
  29. Утиная типизация Значения автоматически приводятся к нужному типу, когда это

    необходимо. Только когда необходимо, сама по себе, внезапно, переменная тип поменять не может.
  30. Приведение к boolean Любой объект всегда приводится к true. Число

    приводится к false если равно ±0 или NaN. В остальных случаях — true. Пустая строка приводится к false. Остальные — к true. undefined и null приводятся к false.
  31. Приведение к boolean Любой объект всегда приводится к true. var

    foo = new Boolean(false); foo; // [object Boolean] Boolean(foo); // true if (new Boolean(false)){ console.log("truthy"); // "truthy" }
  32. Приведение к string У объектов вызывается метод valueOf(). Если valueOf()

    вернул не примитив, вызывается toString(). ({valueOf: function(){ return "foo"; }}) + "bar"; // "foobar"
  33. Приведение к number У объекта сначала вызывается valueOf(), иначе toString().

    true приводится к 1. false приводится к 0. null приводится к 0. undefined приводится к NaN
  34. Приведение к number Пустая строка приводится к 0. "Infinity", "+Infinity",

    "-Infinity" к ±∞. Строки по регулярке ^\s*[+-]?(\d*\.)?\d+([eE][+-]?\d+)?\s*$ к значению в десятеричной нотации. Строки по регулярке ^\s[+-]?*0[Xx][\dA-Fa-f]+\s*$ к значению в шестнадцатеричной нотации. Остальные строки — к NaN.
  35. Из number в string (number).toString(n); Преобразовать в строку по базису

    n. (n по умолчанию 10) (32).toString(); // 32 (32).toString(10); // 32 (32).toString(16); // 20 (32).toString(2); // 100000 (32).toString(36); // w Math.random().toString(36);
  36. Из number в string (number).toPrecision(n); Отображает только n значащих цифр

    в числе. Math.PI.toPrecision(3); // "3.14" (42).toPrecision(1); // "4e+1"
  37. Из number в string (number).toFixed(n); Отображает с n цифр после

    запятой. 0.1 + 0.2; // "0.30000000000000004" (0.1 + 0.2).toFixed(2); // "0.30"
  38. Из string в number parseInt(s, b); Разбирает строку как целое

    число по основанию b. Number("12 негритят"); // NaN parseInt("12 негритят"); // 12 parseInt(""); // NaN
  39. Из string в number parseInt(s, b); В ECMA-262-3 если b

    не указано, оно определяется автоматически. parseInt("10"); // 10 parseInt("010"); // 8 parseInt("0x10"); // 16 parseInt("10", 10); // 10 parseInt("010", 10); // 10 parseInt("0x10", 10); // 0
  40. Из string в number parseFloat(s); Разбирает строку как float. parseFloat("12

    негритят"); // 12 parseFloat("9.5"); // 9.5 parseFloat("0x10"); // 0 parseFloat(""); // NaN parseFloat("Infinity"); // Infinity
  41. < >

  42. Из number в int32 Осторожнее с переполнением! ~~0x7FFFFFFF; // 2147483647

    // 0111 1111 1111 1111 1111 1111 1111 1111 ~~0x80000000; // -2147483648 // 1000 0000 0000 0000 0000 0000 0000 0000 ~~(0x100000000 + 42); // 42 // 1 0000 0000 0000 0000 0000 0000 0010 1010
  43. Из int32 в uint32 Оператор >>> очищает знаковый флаг ~~0xF0000000;

    // -268435456 -268435456 >>> 0; // 4026531840 (4026531840).toString(16); // f0000000
  44. Логические операторы a && b a || b !a Оба

    операнда приводятся к boolean.
  45. Арифметические операторы a * b a / b a %

    b a - b -a +a a++ a-- ++a --a Оба операнда приводятся к number
  46. Сложение a + b Если хотя бы один из операндов

    string, оба приводятся к string и складываются как строки. Иначе — оба к number и складываются как числа.
  47. Побитовые операторы a & b a ^ b a |

    b a >> b a << b a >>> b Оба операнда приводятся к int32
  48. NaN Любое сравнение с NaN возвращает false. NaN никогда ничему

    не равен. Даже самому себе. NaN === NaN; // false NaN > NaN; // false NaN < NaN; // false
  49. Операторы > и < Операнды приводятся к примитивам. Если оба

    операнда — строки, они сравниваются лексикографически. Иначе — приводятся к number. "99" > "100"; // true "99" > 100; // false
  50. Оператор === Не приводит типы. Если операнды — ссылки на

    один и тот же объект, true. Если операнды примитивы и равны по значению, true. В остальных случаях false;
  51. Оператор === var a = []; var b = [];

    a === b; // false var a = []; var b = a; a === b; // true 42 === "42"; // false
  52. == 1. Одинаковый тип? Если типы операндов одинаковые, == работает

    как ===: Если оба операнда — объекты, они сравниваются по ссылке, иначе — по значению.
  53. == 1. Одинаковый тип? 2. null или undefined? Если хотя

    бы один из операндов null или undefined: null равен null. undefined равен undefined. null равен undefined. В остальных случаях false.
  54. == 1. Одинаковый тип? 2. null или undefined? 3. Объект

    в примитив Если один из операндов объект, он приводится к примитиву.
  55. == 1. Одинаковый тип? 2. null или undefined? 3. Объект

    в примитив 4. Оба операнда строки? Если оба операнда строки, сравнить их по значению.
  56. == 1. Одинаковый тип? 2. null или undefined? 3. Объект

    в примитив 4. Оба операнда строки? 5. Привести к number Наконец, оба значения приводятся к number и сравниваются по значению.
  57. Операторы >= и <= 1. Привести оба операнда к примитивам.

    2. Сравнить a < b (или a > b). 3. Сравнить a == b. [] == []; // false [] <= []; // true ??? [] >= []; // true ???