Почему Math.max() меньше, чем Math.min()?
То, что Math.max() > Math.min() возвращает false, звучит неправильно, но на самом деле, в этом много смысла. Если аргументы не указаны, Math.min() возвращает бесконечность infinity, а Math.max() возвращает -infinity. Это часть спецификации для методов max() и min(), но за выбором стоит логика. Взгляните на код:
То, что Math.max() > Math.min() возвращает false, звучит неправильно, но на самом деле, в этом много смысла. Если аргументы не указаны, Math.min() возвращает бесконечность infinity, а Math.max() возвращает -infinity. Это часть спецификации для методов max() и min(), но за выбором стоит логика. Взгляните на код:
Math.min(1)Если -infinity считался бы аргументом по умолчанию для Math.min(), то каждый результат равнялся бы -infinity, что бесполезно. Поскольку аргумент по умолчанию равен infinity, добавление другого аргумента вернёт это число – желаемое поведение.
// 1
Math.min(1, infinity)
// 1
Math.min(1, -infinity)
// -infinity
Почему 018 минус 017 равно 3?
В JavaScript префикс 0 преобразует число в восьмеричное. Однако 8 не используется в восьмеричном виде, и любое число, содержащее 8, будет автоматически преобразовано в десятичное число.
Следовательно, 018 - 017 по сути эквивалентно десятичному выражению 18 - 15, потому что 017 – восьмеричное число, а 018 – десятичное.
В JavaScript префикс 0 преобразует число в восьмеричное. Однако 8 не используется в восьмеричном виде, и любое число, содержащее 8, будет автоматически преобразовано в десятичное число.
Следовательно, 018 - 017 по сути эквивалентно десятичному выражению 18 - 15, потому что 017 – восьмеричное число, а 018 – десятичное.
Рефакторинг. Улучшение проекта существующего кода
Второе издание книги Мартина Фаулера объясняет, что такое рефакторинг на самом деле, впрочем, как и первое издание, выпущенное 20 лет назад. После прочтения книги вы найдете ответы на следующие вопросы:
1. Зачем мне рефакторинг моего кода?
2. Как я могу распознать код, который нуждается в рефакторинге?
3. Как я могу успешно провести рефакторинг своего кода?
Прочитав эту книгу, вы поймете сам процесс и общие принципы рефакторинга, которые сможете сразу же применить к своему коду. Вы также научитесь обнаруживать «косяки» в коде вашего коллеги по команде, которые требуют рефакторинга.
Второе издание книги Мартина Фаулера объясняет, что такое рефакторинг на самом деле, впрочем, как и первое издание, выпущенное 20 лет назад. После прочтения книги вы найдете ответы на следующие вопросы:
1. Зачем мне рефакторинг моего кода?
2. Как я могу распознать код, который нуждается в рефакторинге?
3. Как я могу успешно провести рефакторинг своего кода?
Прочитав эту книгу, вы поймете сам процесс и общие принципы рефакторинга, которые сможете сразу же применить к своему коду. Вы также научитесь обнаруживать «косяки» в коде вашего коллеги по команде, которые требуют рефакторинга.
Добро пожаловать в бар CodeWars
Бар CodeWars советует вам пить 1 стакан воды после того, как вы выпьете 1 алкогольный напиток. Ваши знакомые кодеры купили вам несколько напитков в виде строки. Верните им строку, которая укажет, сколько нужно выпить стаканов воды, чтобы не быть с похмелья.
Примеры
Бар CodeWars советует вам пить 1 стакан воды после того, как вы выпьете 1 алкогольный напиток. Ваши знакомые кодеры купили вам несколько напитков в виде строки. Верните им строку, которая укажет, сколько нужно выпить стаканов воды, чтобы не быть с похмелья.
Примеры
"1 beer" --> "1 glass of water"
"1 shot, 5 beers, 2 shots, 1 glass of wine, 1 beer" --> "10 glasses of water"Паттерны проектирования
Эта книга, у которой сразу 4 автора, учит вас шаблонам проектирования и лучшим практикам, используемым другими разработчиками для создания функционального, повторно используемого, и гибкого ПО. В издании много наглядных представлений, которые помогут вам легче освоить новые концепции.
Если вы хотите узнать о таких вещах, как фабрики, синглтоны, внедрение зависимостей и т.д., эта книга — отличный выбор. Примеры написаны на Java, поэтому было бы неплохо знать этот, либо любой другой объектно-ориентированный язык.
Эта книга, у которой сразу 4 автора, учит вас шаблонам проектирования и лучшим практикам, используемым другими разработчиками для создания функционального, повторно используемого, и гибкого ПО. В издании много наглядных представлений, которые помогут вам легче освоить новые концепции.
Если вы хотите узнать о таких вещах, как фабрики, синглтоны, внедрение зависимостей и т.д., эта книга — отличный выбор. Примеры написаны на Java, поэтому было бы неплохо знать этот, либо любой другой объектно-ориентированный язык.
Eсть ли разница между window и document?
Да. У JavaScript есть глобальный объект и всё происходит через него.
Window – тот самый объект, который хранит глобальные переменные, функции, местоположение, историю. Всё находится внутри него, setTimeout, XMLHttpRequest, console и localStorage также являются частью window.
Аналогично дело обстоит и с document, который является свойством объекта window и представляет DOM.
Все ноды – это часть document, следовательно, вы можете использовать getElementById или addEventListener для document. Но обратите внимание, что этих методов нет в объекте window.
Да. У JavaScript есть глобальный объект и всё происходит через него.
Window – тот самый объект, который хранит глобальные переменные, функции, местоположение, историю. Всё находится внутри него, setTimeout, XMLHttpRequest, console и localStorage также являются частью window.
Аналогично дело обстоит и с document, который является свойством объекта window и представляет DOM.
Все ноды – это часть document, следовательно, вы можете использовать getElementById или addEventListener для document. Но обратите внимание, что этих методов нет в объекте window.
В чём опасность использования for .. in для объекта или массива?
For..in итерируется по всем полям объекта и его прототипов (т.е. проходит по всей цепочке прототипов).
В приведённом в вопросе коде проблем как таковых нет, но они могут появиться при использовании библиотек/полифиллов, которые переопределяют или создают новые свойства для прототипов стандартных конструкторов (таких как Array или Object).
Модифицированный пример, который работает корректно:
For..in итерируется по всем полям объекта и его прототипов (т.е. проходит по всей цепочке прототипов).
В приведённом в вопросе коде проблем как таковых нет, но они могут появиться при использовании библиотек/полифиллов, которые переопределяют или создают новые свойства для прототипов стандартных конструкторов (таких как Array или Object).
var arr = [3, 4, 5];
Array.prototype.each = function() {
/*some fancy polyfill*/
};
for (var i in arr) {
console.log(i);
}
Выведет0Чтобы избежать таких проблем, можно воспользоваться методом Object.prototype.hasOwnProperty.
1
2
each
Модифицированный пример, который работает корректно:
var arr = [3, 4, 5];
Array.prototype.each = function() {
/*some fancy polyfill*/
};
for (var i in arr) {
if (arr.hasOwnProperty(i)){
console.log(i);
}
}Настойчивый баггер
Напишите функцию, которая принимает число и возвращает его мультипликативное постоянство, которое является числом раз, когда вы должны умножить цифры этого числа, пока не достигнете числа из одного символа.
Примеры:
Напишите функцию, которая принимает число и возвращает его мультипликативное постоянство, которое является числом раз, когда вы должны умножить цифры этого числа, пока не достигнете числа из одного символа.
Примеры:
persistence(39) === 3 // так как 3*9 = 27, 2*7 = 14, 1*4=4
// и число 4 состоит из 1 символа
persistence(999) === 4 // так как 9*9*9 = 729, 7*2*9 = 126,
// 1*2*6 = 12, и наконец 1*2 = 2
persistence(4) === 0 // так как 4 уже состоит из одного символаКаково значение свойства font-size у элемента span?
Anonymous Quiz
2%
72px
65%
12px
3%
48px
9%
0.5px
22%
18px
Как добавлять элементы на HTML страницу динамически?
Создание новых элементов осуществляется с помощью
Создание новых элементов осуществляется с помощью
document.createElement(tagName);
После создания элемента его нужно присоединить к родительскому элементу с помощью .appendChild(node);
Пример:<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Title</title>
<script type="text/javascript">
function addNode() {
var newP = document.createElement("p");
var textNode = document.createTextNode(" I'm a new text node");
newP.appendChild(textNode);
document.getElementById("target").appendChild(newP);
}
</script>
</head>
<body onload="addNode();">
<p id="target">sart here<p>
</body>
</html>