У меня есть эта линия, я скопированный из другого места:Какова функция "|" (трубы)?
Total += parseFloat($(this).val())|0;
Что функция оператора |
? Когда я меняю номер, я получаю разные результаты.
У меня есть эта линия, я скопированный из другого места:Какова функция "|" (трубы)?
Total += parseFloat($(this).val())|0;
Что функция оператора |
? Когда я меняю номер, я получаю разные результаты.
|
в 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
дело.
В каких случаях полезно использовать побитовые операторы? – Jasper
@ Jasper: Есть разные способы, по которым вы хотите поразрядных операторов, это просто необычное использование одного. –
Он также преобразует 'NaN' в' 0' и гарантирует, что '.val()' оценивается как десятичное число, где 'parseInt' потребуется дополнительный аргумент radix. –
|
оператор в JavaScript является побитовым или оператор
Этот оператор обрабатывает операнды в 32-битных целых чисел и для каждого бита возвращает 1, если либо равно 1 и 0 в противном случае.
Как преобразовать операнды в 32-битные целые числа? –
@Shiplu: Он определен в спецификации: http://es5.github.com/#x9.5 (что не означает, что браузеры действительно так делают). –
@Shiplu Я точно не знаю, как это делается. Вероятно, сначала преобразует их в числа, а затем округляет до 32-битных целых чисел. – JaredPar
MDN имеет ссылку на JavaScript: https://developer.mozilla.org/en/JavaScript/Reference#Operators_and_other_keywords –
привет, спасибо всем тем ответам, просто чтобы отметить, когда значение поля ввода было «3,5», функция return «3», когда я меняю «0» и ставя «2», я получаю «5» ... в общей переменной ... Предполагаю, что это был параметр, связанный с сотой ... – Nicolas400
@ Nicolas400: Кто-то поддержал мой ответ (принятый ответ), который заставил меня взглянуть на него, чтобы напомнить себе, что это было, и я был недоволен, что это было неправильно *. Он сказал, что '| 0' будет как' Math.floor', что справедливо только для положительных чисел. Исправлено, FYI. –