var arr1 = ["andesite", "dirt", "pink wool", "dirt", "dead shrub"];
var counts = {}; //из значений массива делаем ключи объекта,
//а из количества их повторений в массиве делаем их свойства
for( var i=0, l=arr1.length; i<l; i++) {
counts[arr1[i]] = (counts[arr1[i]] || 0) + 1; // что это? я понимаю, что это
//операция присвоения свойства ключу,
} // но как оно работает - не пойму.
console.log(counts);
counts[arr1[i]] = (counts[arr1[i]] || 0) + 1;
// если свойство count[arr1[i]] уже есть в объекте arr1
// то мы получаем значение свойства (число) и увеличиваем на 1
// если свойства count[arr1[i]] нет в объекте,
// то оно создается и записывается значение этого свойства 1
// При первой итерации при i=0 у вас создается свойство в объекте arr1['andesite']
// и ему присваивается 1
arr1['andesite'] = ( arr1['andesite'] || 0 ) + 1; // => arr1['andesite'] = 0 + 1;
// и так с каждым новым свойством
// далее это свойство при необходимости просто увеличивает свое значение
var arr = ["Andrey","Petia","Gamer"];
var obj={};
for(var i =0,l=arr.length;i<l;i++){
//мы вольны создавать произвольные свойства в объекте
// через дот нотацию мы такое не можем позволить, для неё нам нужно реально указать имя свойства obj.Andrey ="name";
obj[arr[i]] = "name";
}
var obj = {};
//нам надо сделать свойство название которого являеться значение какой-нeто переменной
var name="Andrey";
//для этого сделаем так
obj[name]="это имя";
//для того чтобы сделать это через точку мы должны явно указать имя а не из переменной его взять
var obj={};
obj.Andrey="это имя";