В комментариях к статье
тут. Обнаружил функцию toInt. Мне она показалась странной и я решил разобраться. Учитывая, что я её, по итогам разбора, сократил, похоже где-то я ошибся. Приведу свои рассуждения, поправьте меня, корифеи!
Функция:
function toInt(number) {
return number && + number | 0 || 0;
}
Оператор && — обычное логическое "и". Вроде бы, если первый операнд ноль, то просто не выполняется побайтовая операция и возвращается первый операнд, что экономит процессорное время. Но! Операция | выполняется раньше, так что смысла в этом операторе не вижу.
Давайте взглянем на очерёдность выполнения операторов:
1. |
2. &&
3. ||
4. +
Плюс здесь для того, чтобы преобразовать операнд в число. Но использование оператора | и без того приводит операнды к числовому представлению. На мой взгляд, от плюса можно избавиться.
Оператор || возвращает то, что с левой стороны, если оно может быть преобразовано в true. Если же нет, возвращает то, что справа. В нашем же случае, если операнд не преобразуется в true, то операция "text"|0 и без того вернёт ноль.
Итак, функция, на мой взгляд, может быть записана так:
function toInt(number) {
return number | 0;
}
Работает идентично, в том числе с Infinity и текстовыми значениями. которые я ей скормил.
Я прав или где-то ошибся?