Неправильные компоненты даты автоматически распределяются по остальным.
Преобразование к числу, разность дат
Когда объект Date используется в числовом контексте, он преобразуется в количество миллисекунд. Даты можно вычитать, результат вычитания объектовDate– их временная разница, в миллисекундах. Это используют для измерения времени:
var start = new Date;
for (var i = 0; i < 100000; i++) {
var doSomething = i * i * i;
}
var end = new Date;
alert( "Цикл занял " + (end - start) + " ms" );
Форматирование и вывод дат
Во всех браузерах, кроме IE10-, поддерживается новый стандарт Ecma 402, который добавляет специальные методы для форматирования дат.
Это делается вызовом date.toLocaleString(локаль, опции), в котором можно задать много настроек. Он позволяет указать, какие параметры даты нужно вывести, и ряд настроек вывода, после чего интерпретатор сам сформирует строку. Пример с почти всеми параметрами даты и русским, затем английским (США) форматированием:
var date = new Date(2014, 11, 31, 12, 30, 0);
var options = {
era: 'long',
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'long',
timezone: 'UTC',
hour: 'numeric',
minute: 'numeric',
second: 'numeric'
};
date.toLocaleString("ru", options); // среда, 31 декабря 2014 г. н.э. 12:30:00
date.toLocaleString("en-US", options); // Wednesday, December 31, 2014 Anno Domini 12:30:00 PM
Методы вывода без локализации:
toString(), toDateString(), toTimeString() - возвращают стандартное строчное представление, не заданное жёстко в стандарте, а зависящее от браузера. Единственное требование к нему – читаемость человеком. Метод toString возвращает дату целиком, toDateString() и toTimeString() – только дату и время соответственно.
Метод Date.now()
Метод Date.now() возвращает дату сразу в виде миллисекунд.
16. Объект как хеш-таблица.
Определение объекта в JavaScript
Объект представляет собой неупорядоченный набор пар вида «ключ-значение». Каждая такая пара называется свойством объекта (функции называются методами), каждое свойство должно иметь уникальное имя, которое может быть строкой или числом. Значение свойства может быть любым: как значением простого типа, так и другим объектом.
Простой пример объекта в JavaScript:
var person = {
firstName: 'Frank',
lastName: 'Johnson'
};
Главное отличие объектов от других типов данных заключается в том, что все операции с ними осуществляются по ссылке.
Создание объектов
В JavaScript существует три способа создания объектов: с помощью литерала объекта, с помощью конструктора Object и с помощью метода Object.create (последний способ предусмотрен только в стандарте ECMAScript 5).
Литералы объектов
Литерал объекта представляет собой фигурные скобки, внутри которых через запятую перечислены свойства:
// Пример пустого объектаvar emptyObject = {}; // Объект, имеющий свойстваvar cat = { color: 'gray', age: 2, say: function() { console.log('Miu miu'); },}Конструктор Object
Второй способ создания объектов в JavaScript — использование конструктора Object:
var cat = new Object();cat.color = 'gray';cat.age = 2;cat.say = function() { console.log('Miu miu');}Метод Object.create()
Этот метод принимает один обязательный параметр — прототип создаваемого объекта, и второй необязательный — список свойств объекта. Чтобы создать объект без прототипа, можно вызвать метод Object.create() c параметром null. Рассмотрим примеры:
Доступ к свойствам объекта
Получить значение свойства объекта можно, указав имя свойства через точку:
console.log(cat.color);
Или указав имя свойства в квадратных скобках:
console.log(cat[color]);
Второй способ является более гибким. Через точку можно указать только строковое имя свойства, в качестве имени свойства в квадратных скобках может быть число, вычисляемое значение или переменная.
Если мы пытаемся обратиться к свойству объекта, которого не существует — будет возвращено значение undefined. Однако попытка получить свойство значения null или undefined вызовет ошибку.
Объект имеет как собственные свойства (определенные в нем), так и унаследованные (определенные в цепочке прототипов). Проверить, имеет ли объект определенное свойство (собственное или унаследованное), можно с помощью оператора in:
// Создание объекта
var cat = { color: 'gray' };
// Проверяем, существует ли свойство 'color'
console.log('color' in cat); // true
// Проверяем, существует ли свойство toString (существует в прототипе Object.prototype)
console.log('toString' in cat); // true
Если нужно проверить только собственные свойства объекта, можно использовать метод hasOwnProperty():
console.log(cat.hasOwnProperty('color')); // true
console.log(cat.hasOwnProperty('toString')); //false
Также получить свойства объекта можно в цикле:
var person = {
name: 'John',
lastName: 'Smith',
age: 32
};
for (var item in person) {
console.log(item);
}
Чтобы удалить свойство объекта, можно воспользоваться оператором delete. Оператор delete возвращает истину, если удаление прошло успешно. Он также возвращает истину, если свойство не существует или не может быть удалено.