Объект Js

Материал из support.qbpro.ru

Все есть объекты.

Словарь, или как не сломать мозг читая статью

  • Паттерн (англ. 'pattern — образец, шаблон, система) - Смысл термина «паттерн» больше уже чем просто «образец», и варьируется в зависимости от области знаний, в которой используется. Паттерн (информатика) — эффективный способ решения характерных задач проектирования, в частности проектирования компьютерных программ.

Полезные эпитеты

  • memcached даёт замечательную возможность автоматического удаления данных, когда у них заканчивается срок годности. В MongoDd придётся это отслеживать руками. Мне кажется, что пусть лучше каждое приложение будет занято своими обязанностями.
  • ещё одна особенность, которая доставляет неудобства — это возврат ошибок из асинхронного кода. Для сравнения, в PHP весь код выполняется синхронно, поэтому отловить ошибку на любом уровне вложенности можно с помощью конструкции try-catch. Мы можем завернуть в неё работу контроллера и при возникновении исключительной ситуации сделать throw, и ошибка «всплывёт» к ожидающему её обработчику, который покажет пользователю красивую страничку позора. Несмотря на то, что в JavaScript тоже есть конструкция try-catch, нам она не поможет, т.к. большая часть кода работает асинхронно (операции ввода/вывода). При этом исключительные ситуации, как правило, возникают не при вызове метода, а при работе его callback`а, который выполняется уже вне конструкции try-catch. Для передачи информации об ошибках в Node.JS принято использовать первый параметр callback-функции. Т.е. если у нас возникла ошибка, мы вызываем callback-функцию либо с одним единственным параметром, описывающем её, либо первый параметр выставляем в undefined/null, а в последующих передаём результаты работы нашего функционала.

Объекты.

var <имя_объекта> = new <Тип_объекта> ('Привет мир');

Пример создания объектов разных типов:

Явное создание
Неявное создание
Число
var num = new Number(12345.6789); var num = 12345.6789;
Булево значение
var c = new Boolean(true); var bul = true;
Функция
var fun = new Function('x', 'var p = x'); var fun = function(x){var p = x}
Массив
var arr = new Array('a', 'b', 'c'); var arr = ['a', 'b', 'c'];
Объект
var obj = new Object(); var obj = {};

Методы (функции)

arguments

Переменная, доступная внутри функции и содержащая аргументы и ссылку на саму функцию. Вы можете обращаться к аргументу по номеру, начиная от 0. При этом arguments содержит не объявленные, а реально переданные аргументы.

Следующий пример выведет реально переданные три аргумента, несмотря на то, что в функции их всего два.


function func(a,b) {
  alert(arguments[0])
  alert(arguments[1])
  alert(arguments[2])
}
func(1,2,3)

Кроме цифровых индексов, у arguments есть свойство length, такое же как у массива.

Благодаря этому можно вызывать функции с переменным числом параметров. В следующем примере функция возвращает сумму всех аргументов.

Пример: сумма аргументов

function sum() {
  var s = 0
  for(var i=0; i<arguments.length; i++) s += arguments[i]
  return s
}

Несмотря на доступ по индексу и наличие свойства length, arguments не является массивом, т.е не принадлежит типу Array.

Поэтому для arguments нельзя напрямую вызвать методы этого класса:

arguments.pop() // ошибка !

Можно, однако, вызвать методы Array через apply/call:

var args = Array.prototype.slice.call(arguments)

Ссылка на функцию arguments.callee

Кроме аргументов, arguments содержит ссылку на выполняющуюся функцию.

Ее можно использовать для задания и чтения статических свойств.

В следующем примере для этого используется статическое свойство called.

Пример: подсчет количества выполнений

function func() {
   arguments.callee.called++
}
func.called = 0;
func()
func()
alert(func.called) // 2


Операторы В ECMAScript имеются как операторы, использующие в качестве названий ключевые слова, так и операторы, использующие в качестве названий знаки препинания.

Классификация операторов

По убыванию приоритета операторы ECMAScript можно разбить в следующие группы:

. (доступ к свойству),[] (доступ к свойству),() (вызов функции), new (создание нового объекта),
++ (инкремент), -- (декремент), - (унарный минус), + (унарный плюс), ~ (поразрядное дополнение), ! (логическое дополнение), delete (удаление свойства), typeof (определение примитивного типа данных), void (возврат неопределённого значения),
* (умножение), / (деление), % (остаток от деления),
+ (сложение), - (вычитание), + (конкатенация строк),
<< (сдвиг влево), >> (сдвиг вправо с расширением знакового разряда), >>> (сдвиг вправо с дополнением нулями),
< (меньше), <= (меньше или равно), > (больше), >= (больше или равно), instanceof (проверка типа объекта), in (проверка наличия свойства),
== (проверка на равенство), != (проверка на неравенство), === (проверка на идентичность), !== (проверка на неидентичность),
& (поразрядная конъюнкция),
^ (поразрядное сложение по модулю 2),
| (поразрядная дизъюнкция),
&& (конъюнкция),
|| (дизъюнкция),
?: (тернарная условная операция),
= (присваивание), *=, /=, +=, -=, <<=, >>=, >>>=, &=, ^=, |= (присваивание с операцией),
, (множественное вычисление)[17].

Операторы ++, --, -, +, ~, !, delete, typeof, void, ?:, =, *=, /=, +=, -=, <<=, >=, >>>=, &=, ^=, |= правоассоциативны (то есть для них a op b op c эквивалентно a op (b op c)). Остальные операторы ECMAScript левоассоциативныe.

По арности операторы ECMAScript делятся на следующие группы:

унарные (delete, void, typeof, ++, --, - (унарный минус), + (унарный плюс), ~, !, new),
бинарные (., [], (), *, /, %, + (сложение), - (вычитание), + (конкатенация строк), <<, >>, >>>, <, <=, >, >=, instanceof, in, ==, !=, ===, !==, &, ^, |, &&, ||, =, *=, /=, +=, -=, <<=, >=, >>>=, &=, ^=, |=, ,),
тернарные (?:),
операторы, не имеющие фиксированного количества операндов (()).

По положению знака операции относительно операндов операторы ECMAScript делятся на следующие группы:

префиксные (например, new, ++ (префиксный инкремент),
инфиксные (например, +, -),
постфиксные (например, ++ (постфиксный инкремент), -- (постфиксный декремент).

Также операторы классифицируются по типу операндов и по характеру осуществляемого действия.

Особенности операторов ECMAScript

В ECMAScript нет оператора, позволяющего проверить, относится ли свойство непосредственно к объекту или является унаследованным.

Такая проверка осуществляется с помощью метода hasOwnProperty(). В связи с тем, что данный метод не является оператором, он может быть переписан любым другим свойством.

Оператор + является единственным арифметическим оператором в языке, который перегружен для строковых аргументов. Если хотя бы один из операндов — строка, + действует как конкатенатор, в противном случае выполняется сложение.

В отличие от языков, где void является типом данных, в ECMAScript это оператор, возвращающий значение undefined.

Оператор == осуществляет проверку на равенство по алгоритму, состоящему из 10 шагов, подразумевающего в ряде случаев преобразование типов, что, в конечном счёте, может привести к неочевидным результатам.

Пример результатов работы == (во всех перечисленных случаях значением оператора === с теми же аргументами будет false):

alert("NaN" == NaN);       // false
alert(NaN == NaN);         // false
alert(true == 1);          // true
alert(true == 42);         // false
alert(null == 0);          // false
alert(0 == "");            // true
alert("" == 0);            // true
alert("false" == false);   // false
alert(false == 0);         // true
alert(undefined == false); // false
alert(null == false);      // false
alert(undefined == null);  // true
alert(" \t\r\n " == 0);    // true

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

push

array.push( elem1, elem2, ... )

Эти элементы будут добавлены в конец массива. Он добавляет элементы, начиная с текущей длины length и возвращает новую, увеличенную длину массива.

Пример: добавление двух элементов
// array.length = 2
var array = [ "one", "two" ] 
// добавить элементы "three", "four"
var pushed = array.push("three", "four")
// теперь array = [ "one", "two", "three", "four" ]
// array.length = 4
// pushed = 4

pop

arrayObj.pop()

Этот метод извлекает последний элемент массива и возвращает его. При этом возвращенный элемент удаляется из массива, а длина массива уменьшается на единицу. Если массив пустой, то метод pop() возвращает значение undefined, при этом массив так и остается пустым.

Этот метод изменяет исходный массив.

myFish = ["angel", "clown", "mandarin", "surgeon"];
popped = myFish.pop();
// теперь popped = "surgeon"
// myFish = ["angel", "clown", "mandarin"]


shift

var elem = arrayObj.shift()

Удаляет элемент с индексом 0 и сдвигает остальные элементы на один вниз. Возвращает удаленный элемент

var arr = ["мой","маленький", "массив"]
var my = arr.shift() // => "мой"
alert(arr[0]) // => "маленький"
// теперь arr = ["маленький", "массив"]

unshift

arrayObj.unshift( [elem1[, elem2[, ...[, elemN]]]] )

Аргументы

elem1, elem2, ..., elemN

Добавляет в начало массива элементы и возвращает получившуюся длину.Добавленные элементы сохранят порядок следования. Данный метод изменяет исходный массив.

var arr = ["a", "b"]
unshifted = arr.unshift(-2, -1);
alert(arr ); // [ -2, -1, "a", "b"]
alert("New length: " + unshifted); // 4


if then else

Оператор || возвращает свой второй аргумент, если первый оказался «ложным» (false, null, "", 0), и первый — в противном случае. Оператор && возвращает свой второй аргумент, если первый оказался истинным, и первый — если ложным.

if then else

if ( c ) F(x) else G(x)
Это тернарный оператор и всегда содержит три операнда
c ? F(x) : G(x)
c && F(x) || G(x)

if then

if ( c ) F(x)
c && F(x)


JavaScript - ленивый язык, поэтому если в конструкции

x && y

выражение x == false, то выражение y не вычисляется.

Крайне полезная информация

Это надо обработать (всякие трюки)

JavaScript Гарден

Модульный подход в JavaScript

Случайное перемешивание массива

Javascript наследование для чайников

Операторы, их особенности в JS

JavaScript Comparison and Logical Operators

Путь асинхронного самурая

«Лапша» из callback-ов — будьте проще

Как избавиться от пристрастия к синхронности

Спагетти в последовательном вызове асинхронных функций. Теория и практика

javascript - XMLHttpRequest в цикле javascript - XMLHttpRequest подробный анализ примера

Многопоточный яваскрипт


Сравнение скорости создания JavaScript объекта NoPrototype vs Prototype

Оптимизация Javascript-кода

Высокопроизводительные AJAX-приложения

Оптимизация javascript скриптов

Множественные функции в JavaScript

Типы данных в Javascript (особенности)

Функции в Javascript: ссылки и вызовы

javascript - Оптимизация js кода

Всё о JavaScript, оптимизация JavaScript, повышение эффективности кода.

Оптимизация циклов в Javascript :: часть 1

[1]

Работа с объектами в JavaScript: теория и практика

Разработка WEB-проекта на Node.JS: Часть 1

Разработка WEB-проекта на Node.JS: Часть 2

JavaScript. Создание объектов

Создание объектов в Javascript

Работа с объектами в JavaScript: теория и практика


Node.js: использование Event Loop в качестве обычного цикла

Асинхронное программирование в Node.js: Ожидание нескольких событий сразу

Ожидание нескольких событий в nodejs

Асинхронная синхронность. JSDeferred

Сервер очередей для Node.js

Зачем нам memcached на nodejs? Мы и сами с «усами»

Очередь сообщений на node.js и memcacheq

Кластер на основе NodeJS

http://xpoint.ru/know-how/JavaScript/PoleznyieFunktsii

[]



Базовые Namespace паттерны JavaScript Копия в support



[]

[]

[]

[]

[]

[]

[]

[]

[]

[]

[]

[]

[]

Полезные трюки

http://habrahabr.ru/post/155093/