Функция 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 и текстовыми значениями. которые я ей скормил. Я прав или где-то ошибся? |
Первый выриант - глупый, а во-втором - убрана вся глупость. Я в некоторых случаях пользуюсь | 0 для получения числа в любом случае, но делать для этого отдельную функцию как-то избыточно.
|
Цитата:
|
Хорошая функция, может еще также использовать ~~number, но эти неявные приведения типов не всегда хороши. Например
alert(~~'100px' + "\n" + parseInt('100px', 10)); |
при | 0 дробные отбрасываются.
alert( '-2.7' | 0 ); //-2 рулит parseFloat(x) http://jsfiddle.net/hC9Z9/1/ |
function toInt(x) { return Number(x) || 0; } alert(typeof(toInt(1))); alert(toInt('2.5')); alert(toInt('test')) |
Mips, Vampir3, вобще-то interger по определению - целое число )
|
а, да, точняк)
запутали) |
function toInt(x) { return parseInt(x) | 0; } |
Часовой пояс GMT +3, время: 05:32. |