Глава 2. Основы: 1. Добавление функции в прототип любого объекта {code} 2. В parseInt() всегда использовать систему вычисления month = parseInt(month, 10); //09 нормально спарсится 3. Всегда в if() используй === 4. Всегда используй {}, даже где можно без них 5. function MyConstructor() {...} //функции-конструкторы должны начинатся с большой буквы 6. ВЕРХНИЙ регистр для переменных, которые не должны менятся (константы) 7. Префиксы: _private; или _protected и __private; 8. Автодокументация с помощью комментариев YUIDoc 9. jsLint Глава 3. Литералы и конструкторы: 1. var dog = {}; //называется литералом 2. var car = new Object(); //антишаблон: создание объекта через встроенный конструктор 3. Пример создания объекта {code} 4. В конструкторе можно возвращать другой произвольный объект (и только объект, а не число/строку) {code} 5. Не забывай указывать new в функциях-конструкторах: var good_morning = new Waffle(); 6. Можно вручную инициализировать объект, если кто-то забыл поставить new перед запуском функции {code} 7. Литералы массивов var a = ["itsy", "bitsy", "spider"]; 8. Если создавать массив через var a = Array(3); //число 3 оно посчитает размером массива a.length=3 9. Чтобы проверить на массив, используем Array.isArray([1, 2]); // true. typeof [1, 2] === 'object' 10. JSON.parse(jstr) и JSON.stringify(str) //В JSON и ключи и значения должны быть в скобках "" 11. В JSON можно только объекты или массивы. Функции запрещены 12. var re = /pattern/gmi; //литерал регулярных выражений. g - global, m - многострочный текст, i - без учета регистра 13. RegExp()// – можно использовать только когда шаблон не известен заранее и создается как строка во время выполнения 14. В ES3 если одно и то же регулярное выражение создается в цикле, будет возвращаться один и тот же объект 15. В языке JavaScript имеется пять простых типов данных: число, строка, логическое значение, null и undefined 16. Объекты-обертки могут быть созданы с помощью встроенных конструкторов Number(), String() и Boolean() 17. Если проинициализировать переменную через обертку, к ней можно добавлять свойства 18. Можно выбрасывать исключение любого типа {code} Глава 4. Функции: 1. Именнованная функция-выражение: var add = function add(a, b) { return a + b; }; 2. Неименнованная функция-выражение (анонимная функция): var add = function (a, b) { return a + b; }; 3. Функция-объявление: function add(a, b) { return a + b; } 4. Функции могут создавать свои области видимости (privat-переменные) 5. Внутри функции переменные созданные через var - локальные (privat). И они автоматом подымаются вверх. 6. Функции содержут параметр name {code} 7. Присваивать именнованную функцию другой переменной нельзя: var foo = function bar() {}; //из-за проблем с IE 8. Подьем метода в локальной области видимости срабатывает только для функций-обьявлений. (var func = f..() {} - подымится только название переменной) 9. Можно передавать callback-функции другим функциям. при передачи указываются без круглых скобок {code} 10. Если в callback будут передавать обьект с методом, то надо поебать себе мозг {code} 11. Функция может возвращать другую функцию {code} 12. Самоопределяемые функции - функция может перезатерать себя. Во второй раз будет вызываться уже другая ф-я {code} 13. Немедленно вызываемые функции: //с privat-окружением (function (a) { console.log('watch out!', a); } (13) ); (function (a) { console.log('watch out!', a); }) (13); 14. С помощью НВФ, переменную можно вычислять динамечески во время создания: var result = (function () { return 2 + 2; }()); var result = (function () { return 2 + 2; })(); var result = function () { return 2 + 2; }(); 15. НВФ может возвращать функцию, и хранить privat-переменые в замыкании {code} 16. НВФ может использоваться в обектах {code} 17. bookmarklets 18. Немедленно вызываемые объекты (НВО) - ({ a: 'hello', init: function() { alert(this.a); } }).init(); {code} 19. Варианты НВО: ({...}).init(); и ({...}.init()); 20. Недостаток НВО: все компресоры кроме Google Closure Compiler не могут присваивать короткие имена объекту 21. Для кроссбраузерности, вместо ветвления кода и проверок на IE можно заранее реализовать один общий интерфейс {code} 22. length у функции - кол-во ожидаемых аргументов: function func(a, b, c) {} console.log(func.length); // 3 23. Кеширование (мемоизацию, memorization) любой фун-ции можно сделать по хешу входящих параметров {code} 24. Если у функции слишком много параметров - надо вынести их в отдельный объект function(obj) {} 25. В анг. языке функции применяются (apply): sayHi.apply(null, ["hello"]); //this = null 26. Тоже самое, только для одного параметра: sayHi.call(null, "hello"); 27. Если у нас в функцию часто передается один из параметров - можем использовать каррирование {code}