Ответ 1
Конечные цифры после a .
являются необязательными:
console.log(0. === 0); // true
Предположим, я записал 0.5
как 0.-5
неожиданным образом, но он все еще может работать. Что делает 0.
в 0.-5
, чтобы он все еще мог работать и вычислять до -5?
Я также пробовал alert(0.-5+1)
которое печатает -4, игнорирует ли JavaScript 0.
в 0.-5
?
Конечные цифры после a .
являются необязательными:
console.log(0. === 0); // true
0.-5
может быть успешно проанализирован как 0.
[1]-
и 5
. Ниже приведено абстрактное синтаксическое дерево для выражения, сгенерированного AST explorer:
Это (неожиданным образом) допустимый JavaScript и оценивается как -5
.
[1] Согласно грамматике для числовых литералов десятичные цифры и экспоненты являются необязательными:
NumericLiteral ::
ДесятичнымЛитералом
[...]ДесятичнаяЛитеральная ::
DecimalIntegerLiteral. ДесятичныеЦифры опц ЭкспоненциальнаяЧасть опц
В JS вы можете выразить число с необязательной десятичной точкой.
x = 5.; //5
x = 5. + 6. //11
А что касается комментария Tvde1, то может быть применен любой метод Number.
5..toString()
Этот синтаксис позволяет нам запускать функции Number без скобок.
5.toString() //error
(5).toString() //good
5..toString() //good
5 .toString() // awesome
Посмотрите этот вопрос, чтобы узнать почему.
Я думаю, что реальный ответ не о десятичной запятой, а о знаке минус: не будет ли это интерпретироваться как оператор, если ему предшествует что-либо, похожее на число?
console.log(0. - 5) // -5
console.log(0 - 5) // -5
console.log('0.' - 5) // -5
console.log('0' - 5) // -5
console.log(0.-5 === -5) // true