js.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. //1. blocks +
  2. /*{
  3. let a = 10
  4. {
  5. let b = 20
  6. {
  7. let c = 30
  8. //a === 10, b === 20, c === 30
  9. b++
  10. a *= 10
  11. }
  12. {
  13. let c = 50
  14. //a === 100, b === 21, c === 50
  15. b += 500
  16. }
  17. {
  18. const a = 100500
  19. const d = "value"
  20. //a === 100500, b === 521, c === нет переменной, d === value
  21. {
  22. let a = -50
  23. b = 1000
  24. debugger;//a === -50, b === 1000, c === нет переменной, d === value
  25. }
  26. debugger;//a === 100500, b === 1000, c === нет переменной, d === value
  27. }
  28. debugger;//a === 100, b === 1000
  29. }
  30. debugger;//a === 100
  31. }
  32. */
  33. //2. comparison if +
  34. //Разберите пример
  35. //Добавьте условие отрицательного возраста в пример выше. Расставьте недостающие (но синтаксически необязательные)
  36. // фигурные скобки. Выкиньте лишнее из текущего кода
  37. /*
  38. let age = +prompt("Сколько вам лет?","");
  39. if (age < 0) {
  40. alert("ещё не родился");
  41. }
  42. else {
  43. if (age < 18) {
  44. alert("школьник");
  45. }
  46. else {
  47. if (age < 30) {
  48. alert("молодеж");
  49. }
  50. else {
  51. if (age < 45) {
  52. alert("зрелость");
  53. }
  54. else {
  55. if (age < 60) {
  56. alert("закат");
  57. }
  58. else {
  59. if (age >= 60) {
  60. alert("как пенсия?");
  61. }
  62. else {
  63. alert("то ли киборг, то ли KERNESS");
  64. }
  65. }
  66. }
  67. }
  68. }
  69. } */
  70. //3. switch: sizes +
  71. // Сделайте задание Comparison: sizes используя switch
  72. /*{
  73. let size = +prompt("Введите ваш украинский размер одежды (верхняя одежда, платья, брюки)");
  74. switch (size) {
  75. case 36:
  76. case 38:
  77. alert("Ваш размер по размерной сетке США XS");
  78. break;
  79. case 40:
  80. alert("Ваш размер по размерной сетке США S");
  81. break;
  82. case 42:
  83. case 44:
  84. alert("Ваш размер по размерной сетке США M");
  85. break;
  86. case 46:
  87. case 48:
  88. alert("Ваш размер по размерной сетке США L");
  89. break;
  90. case 50:
  91. case 52:
  92. alert("Ваш размер по размерной сетке США XL");
  93. break;
  94. }
  95. }*/
  96. //4. switch: if +
  97. // Перепишите пример ниже, используя if.
  98. /* let color = prompt("Введите цвет","");
  99. switch (color){
  100. case "red":
  101. document.write("<div style='background-color: red;'>красный</div>");
  102. case "black":
  103. document.write("<div style='background-color: black; color: white;'>черный</div>");
  104. break;
  105. case "blue":
  106. document.write("<div style='background-color: blue;'>синий</div>");
  107. case "green":
  108. document.write("<div style='background-color: green;'>зеленый</div>");
  109. break;
  110. default: document.write("<div style='background-color: gray;'>Я не понял</div>");
  111. }
  112. { let color = prompt("Введите цвет","");
  113. if (color === 'red') {
  114. document.write("<div style='background-color: red;'>красный</div>");
  115. document.write("<div style='background-color: black; color: white;'>черный</div>")
  116. } else if (color === 'black') {
  117. document.write("<div style='background-color: black; color: white;'>черный</div>")
  118. } else if (color === 'blue') {
  119. document.write("<div style='background-color: blue;'>синий</div>");
  120. document.write("<div style='background-color: green;'>зеленый</div>");
  121. } else if (color === 'green') {
  122. document.write("<div style='background-color: green;'>зеленый</div>");
  123. } else {
  124. document.write("<div style='background-color: gray;'>Я не понял</div>");
  125. }
  126. } */
  127. //5. noswitch +
  128. //Напишите функцию noSwitch, которая принимает объект со значениями-функциями, ключ для объекта и запускает одну
  129. // из функций из объекта если ключ найден, иначе - запускает default:
  130. /*
  131. {
  132. const noSwitch = (key, cases, defaultKey = 'default') => {
  133. if (drink in cases) {
  134. cases[drink]()
  135. } else {
  136. cases.default()
  137. }
  138. }
  139. const drink = prompt("Что вы любите пить");
  140. //запуск функции
  141. noSwitch (drink, {
  142. воду: () => console.log('Самый здоровый выбор!'),
  143. чай() {
  144. console.log('Вкусная и полезная штука. Не переусердствуйте с сахаром')
  145. },
  146. "пиво": () => console.log('Хорошо летом, да в меру'),
  147. виски: function () {
  148. console.log('Да вы, батенька, эстет! Не забудьте лед и сигару')
  149. },
  150. default() {
  151. console.log('шото я не понял')
  152. }
  153. })
  154. } */
  155. //6. closure calc +
  156. // Напишите внутри анонимной функции, переданной в then (data =>):
  157. // цикл, который перебирает курсы;
  158. // на каждой итерации создается кнопка (document.createElement)
  159. // текст кнопки - название валюты (innerHTML или innerText)
  160. // Назначьте обработчик события на этой кнопке (onclick = () => {.....}). Функция-обработчик должна быть написана
  161. // прямо в теле цикла
  162. // Обработчик должен спрашивать сумму используя prompt и переводить эту суммы из валюты, написанной на кнопке в USD
  163. //
  164. // Найдите замыкания. Для доступа к валютам из data.rates используйте [], . тут не поможет. Кнопки добавляйте в
  165. // специальный контейнер (div например), созданный в HTML, или, на худой конец, в body
  166. /*{
  167. fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
  168. .then(data => {
  169. let button = document.createElement( "button" ) // создаем новый элемент <button>
  170. button.innerText = key;
  171. document.body.appendChild(button); // добавляем наш элемент в элемент <body>
  172. button.onclick = () => {
  173. let sum = prompt("Введите сумму в выбраной валюте");
  174. let result = (sum / value).toFixed(2);
  175. alert(`Результат операции ${result} $`)
  176. }
  177. }
  178. console.log(data) //изучите структуру, получаемую с сервера в консоли
  179. })
  180. } */
  181. //7. closure calc 2 +
  182. //Используя заготовку из предыдущего задания, наполните select-ы тэгами option с названиями валют, используя цикл
  183. // document.createElement
  184. // innerText для option
  185. // from.append или to.append
  186. // За пределами цикла назначьте обработчики onchange для элементов select и oninput для элемента input, используя
  187. // их id. По этим событиям обновляйте текст в div#rate и div#result
  188. //
  189. // Для чтения текущего значения select используйте свойство value: from.value или to.value
  190. //Создайте HTML файл с :
  191. //
  192. fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
  193. .then(data => {
  194. const from = document.getElementById('from');
  195. const to = document.getElementById('to');
  196. const exchangeRate = document.getElementById('rate')
  197. const amount = document.getElementById('amount');
  198. const result = document.getElementById('result');
  199. for (let [rate, course] of Object.entries(data.rates)) {
  200. const optionFrom = document.createElement('option')
  201. const optionTo = document.createElement('option')
  202. optionFrom.innerHTML = optionTo.innerHTML = rate
  203. optionTo.value = optionFrom.value = rate
  204. from.append(optionFrom);
  205. to.append(optionTo);
  206. }
  207. from.onchange = to.onchange = amount.oninput = () => {
  208. exchangeRate.innerHTML = (data.rates[to.value] / data.rates[from.value]).toFixed(3)
  209. result.innerHTML = (data.rates[to.value] / data.rates[from.value] * amount.value).toFixed(2)
  210. }
  211. })
  212. //8. countries and cities +
  213. //По аналогии с предыдущем заданием, реализуйте интерфейс выбора страны и города:
  214. //
  215. // по закрузке данных наполняйте select#countries элементами option с названиями стран;
  216. // так же назначьте обработчик события onchange в select#countries, который:
  217. // удаляет старый контент select#cities (достаточно занести в innerHTML или innerText пустую строку)
  218. // добавляет в select#cities элементы option с городами из выбранной только что страны.
  219. // Таким образом, при изменении страны будет меняться список городов в select#cities
  220. {
  221. fetch('https://raw.githubusercontent.com/russ666/all-countries-and-cities-json/master/countries.min.json').
  222. then(res => res.json())
  223. .then(data => {
  224. const countries = document.getElementById('countrySelect');
  225. const cities = document.getElementById('citySelect')
  226. for (country in data){
  227. const optionCounty = document.createElement('option')
  228. optionCounty.innerText = optionCounty.value = country
  229. countries.append(optionCounty)
  230. }
  231. countries.onchange = () => {
  232. cities.innerText = ''
  233. for (city of data[countries.value]){
  234. const optionCity = document.createElement('option')
  235. optionCity.innerText = optionCity.value = city
  236. cities.append(optionCity)
  237. }
  238. }
  239. })
  240. }