Важное свойство объектов — объекты копируются по ссылке, а не по значению. Это значит, что:
Объекты предназначены для хранения комплексных данных, например описаний (в виде перечня свойств) каких-либо сложных сущностей. Синтаксис создания объекта:
// создание массива в помощью new Object
var emptyObject = new Object(); // пустой объект
// создание с помощью литерала
var yetAnotherEmptyObject = {}; // пустой объект
var user = { // объект со свойствами
name: "Basil",
"full address": "Shevchenko street, b. 32, ap. 911",
medals: {
gold: 2,
silver: 3,
bronze: 15
},
sing: function() {
alert("We are the champions, my friends!");
}
};
Свойствами объектов могут быть данные любого типа, в том числе и другие объекты.
Доступ к свойствам объекта осуществляется с помощью оператора "." (точка) или квадратных скобок. При этом попытка доступа к несуществующему свойству не вызовет ошибки, а вернёт undefined:
alert(object3.name);
alert(object3["full address"]); // т.к. обращение через точку вызовет ошибку
var property = "name";
alert(object3[property]); // т.к. название свойства находится в переменной
alert(object3.medals.gold);
alert(object3.height); // undefined
object3.medals.silver = 4;
object3.medals.wooden = 1;
delete object3.medals.wooden; // удаление свойств
Самый простой способ проверить наличие свойства у объекта — воспользоваться оператором in:
if ("medals" in user){
alert("User has medals!");
}
Можно также воспользоваться сравнением значения свойства с undefined (т.к. несуществующие свойства объекта по умолчанию получают это значение), но такая проверка может оказаться неточной в случае, когда свойство у объекта есть и его значение undefined.
Помимо проверки наличия свойств у оператора in есть и другое предназначение — перебор свойств объекта:
for(var property in user) {
console.log(property + " => " + user[property]);
}
Перебор свойств можно использовать для "клонирования" объекта, когда нужно создать копию объекта без копирования по ссылке:
var animal = { name: "Barsik", type: "cat"};
var animal2 = {};
for(var property in user) {
animal2[property] = animal[property];
}