Comments 16
Преобразование числа в строку
У чисел есть метод toString()
, который более явен.
Преобразовать строку в число
Опять же, есть более явные parseInt()
и собственно конструктор Number()
, причём между этими способами есть различия.
Перемешать элементы из массива
Насколько я помню, функция сортировки должна быть детерминированной. Math.random внутри неё, как бы, не оч.
Сгладить многомерный массив
Только на один уровень. И лучше уж использовать новый flat()
с полифилом.
Условия сокращённого вычисления
Выглядит, как вредительство. Код становится менее читаемым. Не надо выполнять работу за минификатор.
Спасибо, вы избавили меня от необходимости писать то же самое)
Да, статью стоило назвать 9 очень вредных советов по JavaScript.
У чисел есть метод toString(), который более явен.
Лучше использовать String(myVariable)
, этот вариант ни прикаких условиях не выкинет TypeError.
А так, тут все выглядит как вредительство. Особенно игрища с length, в обычном состоянии разработчик не будет ожидать изменения длины массива таким способом. Это работает, это стандарт, но это — экзотика.
Выглядит, как вредительство. Код становится менее читаемым. Не надо выполнять работу за минификатор.
А что мешает читать подобный код?
Почти все пункты — вредные советы, не делайте так.
1 — очевидный, 8-й — ОК, полезно, но тоже очевидно.
Для остального есть куда более правильные способы.
Он неправильный(это перемешивание не истинно случайное), и медленный(O(n*lg n) вместо O(n))
habr.com/ru/post/358094
UPD: глянул в оригинал. При переводе потерян весь смысл в «Every day I'm shufflin'». Автор неспроста написал этот текст жирным
let entries = [1, 2, 3, 4, 5, 6, 7];
console.log(entries.length);
// 7
entries = [];
console.log(entries.length);
// 0
console.log(entries);
// []
А вообще статья странная. Некоторые примеры из неё у нас явно запрещены правилами eslint
Только вы не очистили массив, а создали новый и присвоили его переменной, так что получаете баг :(
Вот вам код, запустите в консоли:
let queue = [0,1,2];
const bomb = {
arm(array) {
console.log('THE ARRAY BOMB IS SET. CLEAR IT BEFORE TIMER EXPIRES OR YOU\'RE BANNED FROM HABR. CLEAR IT BY DOING DOCUMENT CLICK');
this.array = array;
this.tick(10);
},
check () {
this.array.length === 0
},
tick (time) {
setTimeout(() => {
if (this.check()) return console.log(`BOMB HAS BEEN DEFUSED`);
if (!time) return console.log(`U'RE BANNED`);
console.log(`TIME LEFT: ${time}`);
this.tick(time-1);
}, 1e3)
}
}
bomb.arm(queue);
document.addEventListener('click', () => {
queue = [];
console.log(`EXECUTED queue = []. Queue set to ${JSON.stringify(queue)}.`)
});
EDIT: Вот что бывает когда покодишь в 3:45 =(
Вот, вообщем, рабочий пример: https://codepen.io/Fen1kz/pen/abzBbJG
Почти половина о том, как делать не надо.
Совет 2. Приводит к двойном проходу по коллекции. Если использовать метод reduce(), то проблема решается и лаконичность не теряется.
Совет 3 и 4. Сократили количество букавок, но вот далеко не всем понятно, что это всего лишь операции преобразования в строку и парсинга строки. Но как говорилось выше — существуют более корректные стандартные языковые конструкции.
Совет 7. А за такой совет вообще по этапам нужно отправить, вместе с тем кто решит его использовать. Опять же, уменьшили количество букавок, но и сильно ухудшили процесс его отладки. А как известно — отладка это то, чем занимается разработчик большую часть того времени, когда не спит. И как правило, ищут и отлаживают баги те, кто их не создавал. Конечно, эта проблема не совсем актуальна для последних версий хрома, где можно поставить бряку внутри строки, но ведь есть ещё и сафари/файерфокс, и прочая нечисть, под которыми тоже нужно работать.
Совет 2. Приводит к двойном проходу по коллекции. Если использовать метод reduce(), то проблема решается и лаконичность не теряется.
Это вообще как?
Совет 3 и 4. Сократили количество букавок, но вот далеко не всем понятно, что это всего лишь операции преобразования в строку и парсинга строки. Но как говорилось выше — существуют более корректные стандартные языковые конструкции.
Это довольно распространённый трюк, кто его не понимает — виноват сам.
9 очень полезных советов по JavaScript