2012-02-27 3 views
1

У меня есть эта линия, я скопированный из другого места:Какова функция "|" (трубы)?

Total += parseFloat($(this).val())|0; 

Что функция оператора |? Когда я меняю номер, я получаю разные результаты.

+4

MDN имеет ссылку на JavaScript: https://developer.mozilla.org/en/JavaScript/Reference#Operators_and_other_keywords –

+0

привет, спасибо всем тем ответам, просто чтобы отметить, когда значение поля ввода было «3,5», функция return «3», когда я меняю «0» и ставя «2», я получаю «5» ... в общей переменной ... Предполагаю, что это был параметр, связанный с сотой ... – Nicolas400

+1

@ Nicolas400: Кто-то поддержал мой ответ (принятый ответ), который заставил меня взглянуть на него, чтобы напомнить себе, что это было, и я был недоволен, что это было неправильно *. Он сказал, что '| 0' будет как' Math.floor', что справедливо только для положительных чисел. Исправлено, FYI. –

ответ

13

| в JavaScript является integer bitwise OR operator. В этом контексте он удаляет любую дробную часть, возвращаемую parseFloat. Выражение parseFloat($(this).val()) приведет к числу с (потенциально) дробным компонентом, но тогда |0 будет convert it to an integer number, или оно с 0 (что означает, что оно не изменится), поэтому общий результат - получить целое число.

Так функционально, это усекает дробная часть с номера. -1.5 будет -1, и 1.5 будет 1. Это как Math.floor, но усечение, а не округление «вниз» (Math.floor(-1.5) является -2   — следующего низкого целого число   —, а не -1 как версия |0 дает нам).

Так что, возможно, именно поэтому он был использован, чтобы отрубить (а не «пол») дробную часть номера.

В качестве альтернативы это может быть опечатка. Автор этого кода могущества означал написать эту записку (||, а не |):

Total += parseFloat($(this).val()) || 0; 

Это защищает от возможности того, что $(this).val() возвращает "" или подобные, в результате чего parseFloat возвращающегося NaN. Он использует the curiously-powerful || operator для возврата 0, а не NaN в этом случае. (И есть реклама для , помещая пробелы вокруг ваших операторов.) Нужно будет знать контекст кода, чтобы сказать, имеет ли смысл усечение целого числа (|) при добавлении к Total или если они просто защищали NaN дело.

+0

В каких случаях полезно использовать побитовые операторы? – Jasper

+0

@ Jasper: Есть разные способы, по которым вы хотите поразрядных операторов, это просто необычное использование одного. –

+0

Он также преобразует 'NaN' в' 0' и гарантирует, что '.val()' оценивается как десятичное число, где 'parseInt' потребуется дополнительный аргумент radix. –

2

| оператор в JavaScript является побитовым или оператор

Этот оператор обрабатывает операнды в 32-битных целых чисел и для каждого бита возвращает 1, если либо равно 1 и 0 в противном случае.

+0

Как преобразовать операнды в 32-битные целые числа? –

+1

@Shiplu: Он определен в спецификации: http://es5.github.com/#x9.5 (что не означает, что браузеры действительно так делают). –

+0

@Shiplu Я точно не знаю, как это делается. Вероятно, сначала преобразует их в числа, а затем округляет до 32-битных целых чисел. – JaredPar

Смежные вопросы