при этом typeof (elem) будет number, а typeof ('2') будет string...
Asked
Active
Viewed 384 times
-1
1 Answers
3
Хорошо бы указать, какой результат бы Вас устроил.
Потому что JavaScript умеет складывать строки, а вычитать строки - не умеет. Поэтому приходится вычитать числа.
-
Если бы не умел - то была бы ошибка. А тут - умеет, но странным образом) – andreymal May 14 '21 at 15:36
-
-
2
-
-
@Igor спасибо! Хотя тоже, где логика... По сути, это 1 умножается на 10^-7, т.е. на 0.00... Откуда 1 не понятно – InDevX May 14 '21 at 16:12
-
@InDevX Как раз откуда единица - понятно. Число "одна десятимилионная" не существует во время выполнения кода как единица с цепочкой нулей перед ней. Оно (число) существует в каком-то внутреннем представлении. Функция
parseIntпринимает на вход строку. При переводе одной десятимиллионной в строку используется некая внутренняя логика, которая для таких маленьких чисел применяет экспоненциальный формат. ВparseInt, таким образом, попадает строка"1е-7", из которой в число преобразуется начальный кусок до первого символа, который не может быть преобразован. – May 14 '21 at 16:19 -
1Там не какая-то внутренняя логика, а указано в спецификации в пункте 8 и 9 здесь - https://262.ecma-international.org/6.0/#sec-tostring-applied-to-the-number-type – May 14 '21 at 16:21
-
-
-
1@Igor имел ввиду здравому смыслу не понятно. одна милионная это 0, но одна десяти-милионная вдруг стала единицей – InDevX May 14 '21 at 16:25
-
Это же типичный Garbage in, garbage out. Вы вызываете функцию которая ожидает на входе строку с числом. На входе мусор, на выходе что угодно. – Alexey Ten May 14 '21 at 16:28
'2' + '2', что дает'22', а потом'22' - 2, по умолчанию при минусе операнды конвертируются в числа для минуса, вот и получается, что строка 22 уже не строка, а число, 22 - 2 = 20 – entithat May 14 '21 at 15:54