 
  
  function isEven(num) {
 	return num % 2 === 0;
 }
 
function dropEvenElems(list) {
	var result = [], 
			len = list.length, i;
	
	for (i = 0; i < len; i += 1) {
		isEven(i) && result.push(list[i]);
	}
	
	return result;
}
var arr = ['а','б','в','г', 'д'];
dropEvenElems(arr); 
  
  const you = { device: 0, accessory: 0, availableMoney:  null };
handle(99.99, 9.99, 0.08, you);
function handle(phone, accessory, tax, customer) {
	
	const availableMoney = parseInt(prompt('Сколько денег у вас не счету?', ''), 10);
	
	if(Number.isNaN(availableMoney) || availableMoney <= 0) return alert('Остаток на счету не является положительной суммой!');
	customer.availableMoney = availableMoney;
	
	if(!confirm('Купить телефон?')) return purchaseNothing(); // ты не хочешь покупать девайс о_0
	const phonePrice = getRealPrice(phone, tax); // стоимость девайса с учётом налогов
	
	if(availableMoney < phonePrice) return phoneBuyingFailed(availableMoney, phonePrice); // девайс не купить :(
	
	if(!confirm('Купить акссесуар?')) return purchasePhone(phonePrice, customer); // ты хочешь девайс, но без акссесуара :|
	const comboPrice = phonePrice + getRealPrice(accessory, tax); // стоимость трубы и акссесуара вместе (комбо) с учётом налогов
	
	if(availableMoney > comboPrice) return purchaseCombo(comboPrice, customer); // денег хватило на всё!
	comboBuyingFailed(availableMoney, comboPrice); // акссесуар точно мимо...
		
	return (confirm('Вы всё ещё хотите приобрести только гаджет?')) // когда пролетел с акссесуаром
		?  purchasePhone(phonePrice, customer) 
		: purchaseNothing;
}
function purchaseNothing() {
	return alert('Очень жаль видеть вас уходящим...');
}
function purchasePhone(price, customer) {
	alert('Вы приобрели девайс за ' + price + '$. Поздравляем с покупкой!'); // бабла хватило на всё!
	
	console.log('Your results:');
	
	return { device: 1, accessory: 1, availableMoney: +fixNumb(customer.availableMoney - price) };
}
function purchaseCombo(price, customer) {
	alert('Вы приобрели девайс вместе с акссесуаром за ' + price + '$. Поздравляем с покупкой!'); // бабла хватило на всё!
	
	console.log('Your results:');
	
	return { device: 1, accessory: 1, availableMoney: +fixNumb(customer.availableMoney - price) };
}
function phoneBuyingFailed(total, price) {
	alert(
		'К сожалению, у вас недостаточно средств на счету(' + total + '$).\n' + 
		'Стоимость гаджета с учётом налогов - ' + price + '$'
	);
}
function comboBuyingFailed(total, price) {
		alert(
		'К сожалению, у вас недостаточно средств на счету(' + total + '$).\n' + 
		'Стоимость гаджета вместе c акссесуаром с учётом налогов - ' + price + '$'
	);
}
function fixNumb(n) {
	return n.toFixed(2);
}
function getRealPrice(n, tax) {
	return +fixNumb((n + (n * tax)));
} 
  
   
  
  function sum () {
	return arguments[0] + arguments[1];
}function sum (x, y) {
	return x + y;
} 
  
   
  
   
  
   
  
  data-react-checksum клиетского приложения и серверного. Если совпадают, это означает, что если мы "поднимем" клиентское приложение(дорогая операция), то что мы получим будет совпадать с тем, что отправил сервер. Выходит, что этого можно избежать. Именно это и делает реакт, просто копирует полученный на сервер DOM в клиентское приложение. 
  
  let array = Array.from({ length: 10 }, (v, k) => k);
const fn = (el) => {
  setTimeout(() => { console.log(el) }, 100 * el);
  return el * 2;
};
console.log(array.map(fn)); 
  
  d - это NodeList (список узлов), не имеющий метода hasAttribute()var tags = ['div', 'span', 'ul', 'li', 'p', 'script', 'h1', 'h2'];
var forEach = Array.prototype.forEach
tags.map(function(tag) {
  var list = document.querySelectorAll(tag);
  forEach.call(list, function(el) {
    el.className && console.log(el.className)
  })
}) 
  
  display: none, затем когда при прокрутке добавляешь класс .top-nav-collapse элементу nav возвращаешь гамбургер через display: blocknav navbar-nav navbar-right navbar-border добавляешь айдишку mobileNavvar mobileNav  = document.getElementById('mobileNav')
var navbarToggler = document.querySelector('.navbar-toggle')
mobileNav.addEventListener('click', onMobileNavLink)
function onMobileNavClick(e) {
  if (e.target && e.target.nodeName === 'A') { // если нажал на ссылку в пределах меню
  navbarToggler.click() // закрываешь меню
} 
  
  npm install -g yonpm install -g webapp-generatornpm install -g gulp-cli boweryo webapp чтобы поднять каркас 
  
  var items = Array.prototype.slice.call( document.querySelectorAll('div') ) 
  
  var products = [
  {name:"Grapefruit", calories: 170, color: "red", sold: 8200},
  {name:"Orange", calories: 160, color: "orange", sold: 12101},
  {name:"Cola", calories: 210, color: "caramel", sold: 25412},
  {name:"Diet cola", calories: 0, color: "caramel", sold: 43922},
  {name:"Lemon", calories: 200, color: "clear", sold: 14983},
  {name:"Rapsberry", calories: 180, color: "pink", sold: 9427},
  {name:"Root Beer", calories: 200, color: "caramel", sold: 9909},
  {name:"Water", calories: 0, color: "clear", sold: 62123}
];
  
  
var mapper = {
 	'sold': function (product) {
    console.log('Продукт: ' + product.name + ' был продан ' + product.sold + ' раз.');
  },
  'name': function (product) {
  	console.log('Название продукта: ' + product.name);
  },
  'calories': function (product) {
  	console.log('Продукт: ' + product.name + ' имеет ' + product.calories + ' калорий.');
  },
  'color': function (product) {
  	console.log('Продукт: ' + product.name + ' имеет ' + product.color + ' цвет.');
  }
};
 
 printBy(products, 'calories');
 
 function printBy(collection, prop) {
   collection.map(mapper[prop]);
 }