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

JS (2 of 4)

subzey
February 18, 2013

JS (2 of 4)

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 ???