Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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.
Ответить с цитированием
  #2 (permalink)  
Старый 06.10.2011, 14:07
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Первый выриант - глупый, а во-втором - убрана вся глупость. Я в некоторых случаях пользуюсь | 0 для получения числа в любом случае, но делать для этого отдельную функцию как-то избыточно.
Ответить с цитированием
  #3 (permalink)  
Старый 06.10.2011, 14:30
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

Сообщение от Sweet Посмотреть сообщение
... но делать для этого отдельную функцию как-то избыточно.
Вот-вот. Что может быть короче |0 ?
Ответить с цитированием
  #4 (permalink)  
Старый 07.10.2011, 15:22
Профессор
Отправить личное сообщение для nikita.mmf Посмотреть профиль Найти все сообщения от nikita.mmf
 
Регистрация: 01.02.2010
Сообщений: 364

Хорошая функция, может еще также использовать ~~number, но эти неявные приведения типов не всегда хороши. Например
alert(~~'100px' + "\n" + parseInt('100px', 10));
Ответить с цитированием
  #5 (permalink)  
Старый 25.10.2013, 20:56
Новичок на форуме
Отправить личное сообщение для Mips Посмотреть профиль Найти все сообщения от Mips
 
Регистрация: 14.04.2012
Сообщений: 2

при | 0 дробные отбрасываются.
alert( '-2.7' | 0 );  //-2


рулит parseFloat(x)
http://jsfiddle.net/hC9Z9/1/

Последний раз редактировалось Mips, 25.10.2013 в 21:31.
Ответить с цитированием
  #6 (permalink)  
Старый 26.10.2013, 16:01
Профессор
Отправить личное сообщение для Vampir3 Посмотреть профиль Найти все сообщения от Vampir3
 
Регистрация: 06.12.2011
Сообщений: 172

function toInt(x) {
     return Number(x) || 0;
}
alert(typeof(toInt(1)));
alert(toInt('2.5'));
alert(toInt('test'))

Последний раз редактировалось Vampir3, 26.10.2013 в 16:07.
Ответить с цитированием
  #7 (permalink)  
Старый 26.10.2013, 16:24
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Mips, Vampir3, вобще-то interger по определению - целое число )
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 26.10.2013, 17:37
Профессор
Отправить личное сообщение для Vampir3 Посмотреть профиль Найти все сообщения от Vampir3
 
Регистрация: 06.12.2011
Сообщений: 172

а, да, точняк)
запутали)
Ответить с цитированием
  #9 (permalink)  
Старый 26.10.2013, 20:39
Профессор
Отправить личное сообщение для Vampir3 Посмотреть профиль Найти все сообщения от Vampir3
 
Регистрация: 06.12.2011
Сообщений: 172

function toInt(x) {
     return parseInt(x) | 0;
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск