2015-10-28 3 views
3

Example 1 страницы удлинителей нокаутов описывает способ округления ввода пользователя и обеспечения его только числа.+ оператор vs parseFloat

Он отлично работает, но, глядя через источник они делают своеобразную вещь, которую я не понимаю, что на линии 8 они делают это:

parseFloat(+newValue) 

newValue является строкой.

Когда я изначально задал этот вопрос я не знаю, что + сделал - некоторые дополнительные poking и link to a different MDN page от одного из первоначальных ответов, которые я получил указать это унарный оператор эквивалентен number(str) и что существуют некоторые различия между +str и parseFloat(str) (обработка строк, заканчивающихся буквенными символами и интерпретация гексагона, как правило, являются заголовками).

Я до сих пор не понимаю, почему + в этом случае необходимо было завернутые в parseFloat хотя я начинаю думать, что я мог бы быть опечатка ...

+1

Я только что нашел этот http://stackoverflow.com/questions/12227594/which-is-better-numberx-or-parsefloatx вопрос, который похож - объясняющие объяснения различий между parseFloat и + довольно хороши. Но он все еще не объясняет, почему число должно анализироваться позже ... – JaySeeAre

+0

Просто не имеет смысла использовать оба варианта. Вызов 'parseFloat' на число является antipattern. – Bergi

+0

Можете ли вы ограничить свой вопрос до # 2? – Bergi

ответ

4

Приводя MDN документы для parseFloat:

parseFloat анализирует свой аргумент, строку и возвращает число с плавающей запятой. Если он встречает символ, отличный от знака (+ или -), цифры (0-9), десятичной точки или экспонента, , он возвращает значение до этой точки и игнорирует этот символ и все последующие символы. Допускаются ведущие и конечные пробелы.

Использование unary plus operator вы можете быть уверены, что parseFloat работает на Number, что только полезно, если вы хотите быть более строгим о результатах, но по-прежнему хотят использовать parseFloat

parseFloat('0.32abcd') // -> 0.32 
parseFloat(+'0.32abcd') // -> NaN 

Обновление:

После небольшого перерыва там Перенять в документации и работают несколько тестов, кажется, нет причин использовать parseFloat кроме разбора строк, которые могут содержать номера с нечисловыми тропами к номеру, эк:

parseFloat('31.5 miles') // -> 31.5 
parseFloat('12.75em') // -> 12.75 

Для любых других случаев, когда ваша строка содержит номер + это быстрый и предпочитаемое способ (со ссылкой на MDN docs for unary plus operator):

унарный плюс это самый быстрый и предпочтительный способ преобразования что-то в ряд, потому что он не выполняет никаких других операций по количеству.

См. parseFloat versus unary test case, как это происходит быстрее.

+1

Конечно, но почему' parseFloat (+ '0.32abcd') 'отличается от' + '0.32abcd''? – JaySeeAre

+0

что вы цитируете? Как это отвечает на вопросы? – Bergi

+1

@ Берги, я цитирую MDN. Добавлено описание ссылки и бит –