Показать сообщение отдельно
  #1 (permalink)  
Старый 06.10.2011, 13:57
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

Функция toInt() разъясните, пожалуйста, несколько моментов
В комментариях к статье тут. Обнаружил функцию toInt. Мне она показалась странной и я решил разобраться. Учитывая, что я её, по итогам разбора, сократил, похоже где-то я ошибся. Приведу свои рассуждения, поправьте меня, корифеи!
Функция:
function toInt(number) {
return number && + number | 0 || 0;
}

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

Работает идентично, в том числе с Infinity и текстовыми значениями. которые я ей скормил.
Я прав или где-то ошибся?

Последний раз редактировалось GuardCat, 06.10.2011 в 14:29.
Ответить с цитированием